-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path3_linked_list.py
More file actions
113 lines (95 loc) · 2.69 KB
/
3_linked_list.py
File metadata and controls
113 lines (95 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# linked list
# index값이 독립적으로 저장되어있음 --> 연결이 되어있음( 자신의 이전 혹은 다음값 위치 저장됨)
# Node ,key(노드의 값), link(노드 사이의 연결)
# 한방향
class Node:
def __init__(self,key=None):
self.key = key
self.next = None
def __str__(self):
return str(self.key)
a = Node(3)
b = Node(9)
c = Node(15)
a.next = b
b.next = c
class SinglyLinkerdList:
def __init__(self):
self.head = None
self.size = 0
def __len__(self):
return self.size
####### insert , delete #######
def pushFront(self,key):
new_node = Node(key)
new_node.next = self.head
self.head = new_node
self.size += 1
def pushBack(self,key):
new_node = Node(key)
if len(self) ==0:
self.head = new_node
else:
tail = self.head
while tail.next != None:
tail = tail.next
tail.next = new_node
self.size += 1
def popFront(self):
if self.size == 0:
print ("Size is zero!")
else:
x= self.head
key = x.key
self.head = x.next
del x
self.size -= 1
return key
def popBack(self):
if len(self) ==0:
print ("Size is zero!")
else:
tail = self.head
while tail.next != None:
before_tail = tail
tail = tail.next
before_tail.next = None
self.size -= 1
########## search and generator ######
def search(self,key):
object_ = self.head
while object_.key != key & object_ != None:
object_ = object_.next
if object_ == None:
return None
else:
return object_
### for a in L 사용가능
def __iter__(self):
v=self.head
while v != None:
yield v
v=v.next
Link = SinglyLinkerdList()
Link.pushBack(1)
Link.pushBack(2)
Link.pushBack(3)
Link.pushBack(4)
Link.pushBack(5)
Link.pushBack(6)
Link.pushFront(0)
for i in Link:
print(i.key)
print(Link.popFront())
print(Link.popFront())
print(Link.popFront())
print(Link.popFront())
print(Link.popFront())
print(Link.popFront())
print(Link.popFront())
# 양뱡향
# circularly Doublely Linked List
# Doublely Linked List
# splice연산 --> 2개의 노드사이를 잘라서 다른 노드 뒤에 붙여놓기
# 조건 노드 사이에 head노드가 있으면 안됨
# splice 연산을 사용하여 삽입 삭제 이동 연산 가능