From 99dc0fb0cfc666e5e5d724d755385831ef1fdb92 Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Tue, 31 Mar 2020 19:43:49 +0600 Subject: [PATCH 01/13] Added new Algorithm to find middle element of Linked List --- .../linked_list/MiddleElementOfLinkedList.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 data_structures/linked_list/MiddleElementOfLinkedList.py diff --git a/data_structures/linked_list/MiddleElementOfLinkedList.py b/data_structures/linked_list/MiddleElementOfLinkedList.py new file mode 100644 index 000000000000..2a006e474122 --- /dev/null +++ b/data_structures/linked_list/MiddleElementOfLinkedList.py @@ -0,0 +1,42 @@ +# From Google Find the middle element of a linked list..... + +#Node Setup +class Node: + + def __init__(self, data, next): + + self.data = data + self.next = next + +# setup some nodes and connect them to each other +# the linked list looks like: +# (head) n5 -> n4 -> n3 -> n2 -> n1 -> None + +if __name__ == "__main__": + node1 = Node("hello", None) + node2 = Node("Deniel", node1) + node3 = Node("Blue", node2) + node4 = Node("Green", node3) + node5 = Node("Me", node4) + + # assign a node to the head which functions + # as the entry into our linked list + + head = node5 + + # setup pointers to both start + # at the head of the linked list + + fastPointer = head + slowPointer = head + + # loop through the linked list + # when fastPointer reaches the end of the list + # then slowPointer will be at the middle node + + while fastPointer.next != None and fastPointer.next.next != None: + fastPointer = fastPointer.next.next + slowPointer = slowPointer.next + + # slowPointer is now at the middle node in the linked list + print(slowPointer.data) From 3cecfa639037371daa86e8a63d94db43f095a6f8 Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Wed, 1 Apr 2020 10:41:24 +0600 Subject: [PATCH 02/13] Rename MiddleElementOfLinkedList.py to middle_element_of_linked_list.py --- ...dleElementOfLinkedList.py => middle_element_of_linked_list.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename data_structures/linked_list/{MiddleElementOfLinkedList.py => middle_element_of_linked_list.py} (100%) diff --git a/data_structures/linked_list/MiddleElementOfLinkedList.py b/data_structures/linked_list/middle_element_of_linked_list.py similarity index 100% rename from data_structures/linked_list/MiddleElementOfLinkedList.py rename to data_structures/linked_list/middle_element_of_linked_list.py From 3057ed73f64d6e73d703fdf13d03b68f565e67d3 Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Thu, 9 Apr 2020 17:05:28 +0600 Subject: [PATCH 03/13] changed "middle_element_of_linked_list.py" algorithm for taking input --- .../middle_element_of_linked_list.py | 64 +++++++------------ 1 file changed, 23 insertions(+), 41 deletions(-) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index 2a006e474122..5e4e6d1e945b 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -1,42 +1,24 @@ -# From Google Find the middle element of a linked list..... - -#Node Setup class Node: - - def __init__(self, data, next): - - self.data = data - self.next = next - -# setup some nodes and connect them to each other -# the linked list looks like: -# (head) n5 -> n4 -> n3 -> n2 -> n1 -> None - -if __name__ == "__main__": - node1 = Node("hello", None) - node2 = Node("Deniel", node1) - node3 = Node("Blue", node2) - node4 = Node("Green", node3) - node5 = Node("Me", node4) - - # assign a node to the head which functions - # as the entry into our linked list - - head = node5 - - # setup pointers to both start - # at the head of the linked list - - fastPointer = head - slowPointer = head - - # loop through the linked list - # when fastPointer reaches the end of the list - # then slowPointer will be at the middle node - - while fastPointer.next != None and fastPointer.next.next != None: - fastPointer = fastPointer.next.next - slowPointer = slowPointer.next - - # slowPointer is now at the middle node in the linked list - print(slowPointer.data) + def __init__(self, data): + self.data = data + self.next = None + +class LinkedList: + def __init__(self): + self.head = None + + def push(self, new_data): + new_node = Node(new_data) + new_node.next = self.head + self.head = new_node + + def middle_element(self): + slow_pointer = self.head + fast_pointer = self.head + + if self.head is not None: + while (fast_pointer is not None and fast_pointer.next is not None): + fast_pointer = fast_pointer.next.next + slow_pointer = slow_pointer.next + + return slow_pointer.data From ae6358ced0c7082451a872d0b069e28d0ca0a3d9 Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Thu, 9 Apr 2020 17:16:23 +0600 Subject: [PATCH 04/13] Update middle_element_of_linked_list.py --- .../linked_list/middle_element_of_linked_list.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index 5e4e6d1e945b..bbfa261b6ac8 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -22,3 +22,12 @@ def middle_element(self): slow_pointer = slow_pointer.next return slow_pointer.data + +if __name__ == "__main__": + link = LinkedList() + N = int(input()) + + for i in range(N): + data = int(input()) + link.push(data) + print(link.middle_element()) From f2b41111f550f634de38ec21d58c18fa41fd46bc Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Thu, 9 Apr 2020 20:53:35 +0600 Subject: [PATCH 05/13] Update middle_element_of_linked_list.py --- .../linked_list/middle_element_of_linked_list.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index bbfa261b6ac8..3b0a8f9bd557 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -1,5 +1,5 @@ class Node: - def __init__(self, data): + def __init__(self, data:int) -> int: self.data = data self.next = None @@ -7,12 +7,12 @@ class LinkedList: def __init__(self): self.head = None - def push(self, new_data): + def push(self, new_data:int) -> int: new_node = Node(new_data) new_node.next = self.head self.head = new_node - def middle_element(self): + def middle_element(self) -> int: slow_pointer = self.head fast_pointer = self.head @@ -25,9 +25,9 @@ def middle_element(self): if __name__ == "__main__": link = LinkedList() - N = int(input()) + N = int(input().strip()) for i in range(N): - data = int(input()) + data = int(input().strip()) link.push(data) print(link.middle_element()) From 4675d7fbc294878bef64803b61032927f7309448 Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Sat, 11 Apr 2020 20:14:51 +0600 Subject: [PATCH 06/13] Update middle_element_of_linked_list.py --- .../middle_element_of_linked_list.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index 3b0a8f9bd557..fe46c6807c4f 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -3,16 +3,31 @@ def __init__(self, data:int) -> int: self.data = data self.next = None -class LinkedList: +class LinkedList: + ''' + >>> link = LinkedList() + ''' + def __init__(self): self.head = None - def push(self, new_data:int) -> int: + def push(self, new_data:int) -> int: + ''' + >>> link.push(4) + >>> link.push(3) + >>> link.push(8) + >>> link.push(7) + >>> link.push(9) + >>> link.push(11) + ''' new_node = Node(new_data) new_node.next = self.head self.head = new_node def middle_element(self) -> int: + ''' + >>> link.middle_element() + ''' slow_pointer = self.head fast_pointer = self.head @@ -23,10 +38,9 @@ def middle_element(self) -> int: return slow_pointer.data -if __name__ == "__main__": +if __name__ == "__main__": link = LinkedList() N = int(input().strip()) - for i in range(N): data = int(input().strip()) link.push(data) From 5dbf5aa8336de2bdf63076df3797acbe9184b652 Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Sat, 11 Apr 2020 20:33:44 +0600 Subject: [PATCH 07/13] Update middle_element_of_linked_list.py --- .../middle_element_of_linked_list.py | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index fe46c6807c4f..04635eea9bde 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -4,30 +4,15 @@ def __init__(self, data:int) -> int: self.next = None class LinkedList: - ''' - >>> link = LinkedList() - ''' - def __init__(self): self.head = None def push(self, new_data:int) -> int: - ''' - >>> link.push(4) - >>> link.push(3) - >>> link.push(8) - >>> link.push(7) - >>> link.push(9) - >>> link.push(11) - ''' new_node = Node(new_data) new_node.next = self.head self.head = new_node def middle_element(self) -> int: - ''' - >>> link.middle_element() - ''' slow_pointer = self.head fast_pointer = self.head @@ -38,9 +23,20 @@ def middle_element(self) -> int: return slow_pointer.data -if __name__ == "__main__": +if __name__ == "__main__": + ''' + >>> link = LinkedList() + >>> link.push(4) + >>> link.push(3) + >>> link.push(8) + >>> link.push(7) + >>> link.push(9) + >>> link.push(11) + >>> link.middle_element() + ''' link = LinkedList() N = int(input().strip()) + for i in range(N): data = int(input().strip()) link.push(data) From 9a2adedab1a7629a8f9ce548803de9a14a07e11a Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Sat, 11 Apr 2020 20:48:27 +0600 Subject: [PATCH 08/13] Update middle_element_of_linked_list.py --- .../middle_element_of_linked_list.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index 04635eea9bde..d597ed7f5211 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -13,6 +13,16 @@ def push(self, new_data:int) -> int: self.head = new_node def middle_element(self) -> int: + ''' + >>> link = LinkedList() + >>> link.push(4) + >>> link.push(3) + >>> link.push(8) + >>> link.push(7) + >>> link.push(9) + >>> link.push(11) + >>> link.middle_element() + ''' slow_pointer = self.head fast_pointer = self.head @@ -24,16 +34,6 @@ def middle_element(self) -> int: return slow_pointer.data if __name__ == "__main__": - ''' - >>> link = LinkedList() - >>> link.push(4) - >>> link.push(3) - >>> link.push(8) - >>> link.push(7) - >>> link.push(9) - >>> link.push(11) - >>> link.middle_element() - ''' link = LinkedList() N = int(input().strip()) From 8f553881e3910e1c9aae6a5c28d25fbfcc621abc Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Sat, 11 Apr 2020 20:53:30 +0600 Subject: [PATCH 09/13] Update middle_element_of_linked_list.py --- .../linked_list/middle_element_of_linked_list.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index d597ed7f5211..253117def37c 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -16,11 +16,17 @@ def middle_element(self) -> int: ''' >>> link = LinkedList() >>> link.push(4) + 4 >>> link.push(3) + 3 >>> link.push(8) + 8 >>> link.push(7) + 7 >>> link.push(9) + 9 >>> link.push(11) + 11 >>> link.middle_element() ''' slow_pointer = self.head From 8432de611f704b380a45eebe386ef5b85c561bc8 Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Sun, 12 Apr 2020 15:57:22 +0600 Subject: [PATCH 10/13] Update middle_element_of_linked_list.py --- .../middle_element_of_linked_list.py | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index 253117def37c..5b386ae36752 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -1,7 +1,7 @@ class Node: def __init__(self, data:int) -> int: self.data = data - self.next = None + self.next = None class LinkedList: def __init__(self): @@ -11,34 +11,41 @@ def push(self, new_data:int) -> int: new_node = Node(new_data) new_node.next = self.head self.head = new_node + return self.head.data def middle_element(self) -> int: ''' >>> link = LinkedList() - >>> link.push(4) - 4 - >>> link.push(3) - 3 + >>> link.push(5) + 5 + >>> link.push(6) + 6 >>> link.push(8) 8 + >>> link.push(8) + 8 + >>> link.push(10) + 10 + >>> link.push(12) + 12 + >>> link.push(17) + 17 >>> link.push(7) 7 - >>> link.push(9) - 9 - >>> link.push(11) - 11 + >>> link.push(3) + 3 >>> link.middle_element() + 10 + >>> ''' slow_pointer = self.head fast_pointer = self.head - if self.head is not None: while (fast_pointer is not None and fast_pointer.next is not None): fast_pointer = fast_pointer.next.next slow_pointer = slow_pointer.next - return slow_pointer.data - + if __name__ == "__main__": link = LinkedList() N = int(input().strip()) From ddfe1d163d7310e85474f1e3d2d3cd2c706b1a62 Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Sun, 12 Apr 2020 19:03:45 +0600 Subject: [PATCH 11/13] Update middle_element_of_linked_list.py --- .../linked_list/middle_element_of_linked_list.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index 5b386ae36752..6bb4fd8140ec 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -34,8 +34,12 @@ def middle_element(self) -> int: 7 >>> link.push(3) 3 + >>> link.push(20) + 20 + >>> link.push(-20) + -20 >>> link.middle_element() - 10 + 12 >>> ''' slow_pointer = self.head From 5b7af7a3ccc955b64df83e81ef4eb064f6f7e3db Mon Sep 17 00:00:00 2001 From: Sajied Shah Yousuf <40203390+meSajied@users.noreply.github.com> Date: Sun, 12 Apr 2020 20:22:05 +0600 Subject: [PATCH 12/13] Update middle_element_of_linked_list.py --- .../linked_list/middle_element_of_linked_list.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index 6bb4fd8140ec..647bc77f2c3d 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -6,16 +6,16 @@ def __init__(self, data:int) -> int: class LinkedList: def __init__(self): self.head = None - def push(self, new_data:int) -> int: new_node = Node(new_data) new_node.next = self.head self.head = new_node return self.head.data - def middle_element(self) -> int: ''' >>> link = LinkedList() + >>> link.middle_element() + No element found. >>> link.push(5) 5 >>> link.push(6) @@ -49,6 +49,8 @@ def middle_element(self) -> int: fast_pointer = fast_pointer.next.next slow_pointer = slow_pointer.next return slow_pointer.data + else: + print("No element found.") if __name__ == "__main__": link = LinkedList() From b80618dab47bdfb847712eafcdcf4995b2035c45 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 12 Apr 2020 16:36:25 +0200 Subject: [PATCH 13/13] Whack the trailing whitespace --- .../middle_element_of_linked_list.py | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py index 647bc77f2c3d..2903fe604dfa 100644 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ b/data_structures/linked_list/middle_element_of_linked_list.py @@ -1,16 +1,19 @@ class Node: - def __init__(self, data:int) -> int: - self.data = data + def __init__(self, data: int) -> int: + self.data = data self.next = None + class LinkedList: - def __init__(self): + def __init__(self): self.head = None + def push(self, new_data:int) -> int: new_node = Node(new_data) new_node.next = self.head self.head = new_node return self.head.data + def middle_element(self) -> int: ''' >>> link = LinkedList() @@ -44,19 +47,18 @@ def middle_element(self) -> int: ''' slow_pointer = self.head fast_pointer = self.head - if self.head is not None: - while (fast_pointer is not None and fast_pointer.next is not None): + if self.head: + while fast_pointer and fast_pointer.next: fast_pointer = fast_pointer.next.next slow_pointer = slow_pointer.next return slow_pointer.data else: print("No element found.") - + + if __name__ == "__main__": link = LinkedList() - N = int(input().strip()) - - for i in range(N): + for i in range(int(input().strip())): data = int(input().strip()) link.push(data) print(link.middle_element())