From 56e7ae01d2ae04fa46f32937dd8077134193a792 Mon Sep 17 00:00:00 2001 From: lanzhiwang Date: Tue, 14 Jan 2020 17:02:15 +0800 Subject: [PATCH] enhance swapping code in link (#1660) * enhance swapping code in link * heapify do not recursive * fix * fix identifier and add test * typing.Any and LinkedList instead of Linkedlist * typing.Any and LinkedList instead of Linkedlist --- data_structures/linked_list/swap_nodes.py | 69 +++++++++-------------- 1 file changed, 26 insertions(+), 43 deletions(-) diff --git a/data_structures/linked_list/swap_nodes.py b/data_structures/linked_list/swap_nodes.py index a6a50091e..bb177f419 100644 --- a/data_structures/linked_list/swap_nodes.py +++ b/data_structures/linked_list/swap_nodes.py @@ -1,72 +1,55 @@ +from typing import Any + + class Node: - def __init__(self, data): + def __init__(self, data: Any): self.data = data self.next = None -class Linkedlist: +class LinkedList: def __init__(self): self.head = None def print_list(self): temp = self.head while temp is not None: - print(temp.data) + print(temp.data, end=' ') temp = temp.next + print() # adding nodes - def push(self, new_data): + def push(self, new_data: Any): 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: + def swap_nodes(self, node_data_1, node_data_2): + if node_data_1 == node_data_2: 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: + node_1 = self.head + while node_1 is not None and node_1.data != node_data_1: + node_1 = node_1.next + + node_2 = self.head + while node_2 is not None and node_2.data != node_data_2: + node_2 = node_2.next + + if node_1 is None or node_2 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 + node_1.data, node_2.data = node_2.data, node_1.data if __name__ == "__main__": - list = Linkedlist() - list.push(5) - list.push(4) - list.push(3) - list.push(2) - list.push(1) + ll = LinkedList() + for i in range(5, 0, -1): + ll.push(i) - list.print_list() + ll.print_list() - list.swapNodes(1, 4) + ll.swap_nodes(1, 4) print("After swapping") - list.print_list() + ll.print_list()