
单向循环链表
1
2
3
单向循环链表拥有值域和后继节点域,后继节点域记录下一个节点的位置,
最后一个节点的next域指向第一个节点。
代码实现:
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
class Node(object):
节点
def __init__(self,elem):
self.elem = elem
self.next = None
class SingleLinkList(object):
单链表
def __init__(self,node=None):
self._head=node
if node:
node.next = node
def is_empty(self):
return self._head ==None
def length(self):
if self.is_empty():
return 0
cur = self._head
count = 1
while cur.next !=self._head:
count+=1
cur = cur.next
return count
遍历列表
def travel(self):
if self.is_empty():
return None
cur = self._head
while cur.next !=self._head:
print(cur.elem,end=" ")
cur = cur.next
print(cur.elem)
头添加
def add(self,item):
node = Node(item)
if self.is_empty():
self._head = node
node.next = node
else:
cur = self._head
while cur.next !=self._head:
cur=cur.next
node.next = self._head
self._head = node
cur.next = self._head
尾添加元素 尾插法
def append(self,item):
node = Node(item)
if self.is_empty():
self._head=node
node.next = node
else:
cur = self._head
while cur.next !=self._head:
cur = cur.next
cur.next =node
node.next = self._head
指定位置添加
def insert(self,pos,item):
'''只想位置'''
if pos <= 0:
self.add(item)
elif pos >(self.length()-1):
self.append(item)
else:
pre=self._head
count=0
while count <(pos-1):
count+=1
pre = pre.next
node = Node(item)
node.next = pre.next
pre.next = node
删除节点
def remove(self,item):
if self.is_empty():
return
cur = self._head
pre = None
while cur.next!=self._head:
if cur.elem ==item:
if cur == self._head:
rear = self._head
while rear.next!=self._head:
rear = rear.next
self._head =cur.next
rear.next = self._head
else:
pre.next = cur.next
return
else:
pre = cur
cur = cur.next
if cur.elem ==item:
if cur ==self._head:
self._head = None
else:
pre.next = cur.next
查找节点是否存在
def search(self,item):
if self.is_empty():
return False
cur = self._head
while cur.next !=self._head:
if cur.elem == item:
return True
else:
cur = cur.next
if cur.elem ==item:
return True
return False
if __name__ == "__main__":
ll = SingleLinkList()
print(ll.is_empty())
print(ll.length())
ll.append(1)
print(ll.is_empty())
print(ll.length())
ll.append(2)
ll.add(8)
ll.append(3)
ll.append(4)
ll.insert(2,100)
ll.append(5)
ll.travel()
ll.remove(8)
ll.travel()




近期评论