diff --git a/data_structures/linked_list/swapNodes.py b/data_structures/linked_list/swapNodes.py new file mode 100644 index 000000000..ce2543bc4 --- /dev/null +++ b/data_structures/linked_list/swapNodes.py @@ -0,0 +1,75 @@ +class Node: + def __init__(self, data): + self.data = data; + self.next = None + + +class Linkedlist: + def __init__(self): + self.head = None + + def print_list(self): + temp = self.head + while temp is not None: + print(temp.data) + temp = temp.next + +# adding nodes + def push(self, new_data): + new_node = Node(new_data) + new_node.next = self.head + self.head = new_node + +# swapping nodes + def swapNodes(self, d1, d2): + prevD1 = None + prevD2 = None + if d1 == d2: + return + else: + # find d1 + D1 = self.head + while D1 is not None and D1.data != d1: + prevD1 = D1 + D1 = D1.next + # find d2 + D2 = self.head + while D2 is not None and D2.data != d2: + prevD2 = D2 + D2 = D2.next + if D1 is None and D2 is None: + return + # if D1 is head + if prevD1 is not None: + prevD1.next = D2 + else: + self.head = D2 + # if D2 is head + if prevD2 is not None: + prevD2.next = D1 + else: + self.head = D1 + temp = D1.next + D1.next = D2.next + D2.next = temp + +# swapping code ends here + + + +if __name__ == '__main__': + list = Linkedlist() + list.push(5) + list.push(4) + list.push(3) + list.push(2) + list.push(1) + + list.print_list() + + list.swapNodes(1, 4) + print("After swapping") + list.print_list() + + +