0%

链表数据结构

记录下python版链表数据结构以后可以直接拿来用~

以后在补充c++版本。

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
class Node:
def __init__(self,x=0):
self.val=x
self.next=None


class ChainNode:
def __init__(self):
self.head = None
self.length = 0


#在链表末尾添加一个数值为x的结点
def append(self,x):
item=Node(x)
if not self.head:
self.head=item
self.length+=1
else:
node=self.head
while node.next:
node=node.next
node.next=item
self.length+=1


#更新下标为index+1(第几个结点)的结点的val
def update(self,index,replace):
if self.isempty() or index>self.length:
print('修改下标错误')
return False
node=self.head
i=1
while node and i<index:
node=node.next
i+=1
node.val=replace


def isempty(self):
if self.length==0:
return True
else:
return False


def insert(self,index,replace):
if index>self.length:
print('插入下标错误')
return False
item=Node(replace)
if index == 0:
item.next = self.head
self.head = item
self.length += 1
return
else:
i=0
node=self.head
prev=self.head
while node and i<index:
prev=node
node=node.next
i+=1
if i ==index:
item.next=node
prev.next=item
self.length+=1

def delete(self,index):
if self.isempty():
print('this chain isempty!! we cant delete')
return
if index<0 or index>=self.length:
print('index that you delete out range of chain!!')
return
if index==0:
self.head=self.head.next
self.length-=1
return
# prev为保存前导节点
# node为保存当前节点
# 当j与index相等时就
# 相当于找到要删除的节点
j = 0
node = self.head
prev = self.head
while node.next and j<index:
prev=node
node=node.next
j+=1
if j==index:
prev.next=node.next
self.length-=1

if __name__ == '__main__':
chain=ChainNode()
for i in range(10):
chain.append(i)
chain.insert(0,100)
chain.delete(12)
tmp=chain.head
while tmp:
print(tmp.val)
tmp=tmp.next
print(chain.length)