8000 Define Node.__iter__() · kanthuc/Python@92578b0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 92578b0

Browse files
authored
Define Node.__iter__()
1 parent d37fd6e commit 92578b0

File tree

2 files changed

+51
-67
lines changed

2 files changed

+51
-67
lines changed

data_structures/linked_list/contains_loop.py

Lines changed: 0 additions & 67 deletions
This file was deleted.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from typing import Any
2+
3+
4+
class Node:
5+
def __init__(self, data: Any) -> None:
6+
self.data = data
7+
self.next_node = None
8+
9+
def __iter__(self):
10+
node = self
11+
while node:
12+
yield node.data
13+
node = node.next_node
14+
15+
def has_loop(self) -> bool:
16+
>>> node1 = Node(1)
17+
>>> node1.next_node = Node(2)
18+
>>> node1.next_node.next_node = Node(3)
19+
>>> node1.next_node.next_node.next_node = Node(4)
20+
>>> node1.next_node.next_node.next_node = node1.next_node
21+
>>> has_loop(node1)
22+
True
23+
24+
>>> node2 = Node(1)
25+
>>> node2.next_node = Node(2)
26+
>>> node2.next_node.next_node = Node(1)
27+
>>> node2.next_node.next_node.next_node = Node(2)
28+
>>> contains_loop(node2)
29+
False
30+
"""
31+
return len(list(self)) != len(set(self))
32+
33+
34+
if __name__ == "__main__":
35+
node1 = Node(1)
36+
node1.next_node = Node(2)
37+
node1.next_node.next_node = Node(3)
38+
node1.next_node.next_node.next_node = Node(4)
39+
node1.next_node.next_node.next_node = node1.next_node
40+
print(has_loop(node1))
41+
42+
node2 = Node(5)
43+
node2.next_node = Node(6)
44+
node2.next_node.next_node = Node(5)
45+
node2.next_node.next_node.next_node = Node(6)
46+
print(has_loop(node2))
47+
48+
node3 = Node(1)
49+
# node3.next_node = Node(2)
50+
# node3.next_node.next_node = node3
51+
print(has_loop(node3))

0 commit comments

Comments
 (0)
0