John DoeJohn Doe

代码部分

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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182

class (object):
def __init__(self,data):
#初始化node
self.data = data
self.next = None

def __repr__(self):
return str(self.data)

class LinkedList(object):
def __init__(self):
#初始化linkedlist
self.length = 0
self.head = None

def isEmpty(self):
#判断链表是否为空
return self.length == 0

def get(self,index):
#根据索引获取节点值
index = index if index > 0 else self.length + index
if index > self.length or index < 0:
return None
node = self.head
while index:
node = node.next
index -= 1
return node

def append(self, node):
#在链表末添加node
if isinstance(node,Node):
pass
else:
node = Node(data=node)

if self.isEmpty():
self.head = node
else:
old_head = self.head
while old_head.next:
old_head = old_head.next
old_head.next = node
self.length += 1

def insert(self,index,value):
#在指定位置添加node
if type(index) is int:
if index > self.length:
print("index is out of range")
return
else:
this_node = Node(data=value)
current_node = self.head

if index == 0:
self.head = this_node
this_node.next = current_node
return
else:

while index -1:
current_node = current_node.next
index -= 1

this_node.next = current_node.next
current_node.next = this_node
self.length += 1
return
else:
print("index value must be int.")
return
def delete(self,index):
#删除指定node
if type(index) is int:
if index > self.length:
print("index is out of range")
return
else:
if index == 0:
self.head = self.head.next
else:
current_node = self.head
while index-1:
current_node = current_node.next
index -=1
current_node.next = current_node.next.next
self.length -= 1
return
else:
print("index vlaue must be int.")
return

def update(self,index,value):
#更新指定node
if type(index) is int:
if index > self.length:
print("index out of range")
return
else:
this_node = Node(data=value)
if index == 0:
this_node.next = self.head.next
self.head = this_node
else:
current_node = self.head
while index - 1:
current_node = current_node.next
index -= 1
this_node.next = current_node.next.next
current_node.next = this_node
return
else:
print("index must be int")
return
def get_length(self):
#获取链表长度
current_node = self.head
if current_node:
i = 0
while current_node:
current_node = current_node.next
i += 1
return i
else:
return 0
def clear(self):
#清空链表
self.head = None
self.length = 0
print("clear the linked list finished")

def print_linkedlist(self):
#打印链表
if self.isEmpty():
print("the linkedlist is empty!")
else:
node = self.head
print("head--",node.data,end=' ')
while node.next:
node = node.next
print("-->",node.data,end=' ')
print(" -->None.linked list finished")

def __reversed__(self):
#反转链表 递归
def reverse(pre_node,node):
if pre_node is self.head:
pre_node.next = None
if node:
next_node = node.next
node.next = pre_node
return reverse(node,next_node)
else:
self.head = pre_node

return reverse(self.head,self.head.next)

if __name__ == '__main__':
node0 = Node(data="node0")
node1 = Node(data="node1")
node2 = Node(data="node2")
node3 = Node(data="node3")

linklist = LinkedList()
linklist.append(node0)
linklist.append(node1)
linklist.append(node2)
linklist.append(node3)
linklist.print_linkedlist()
linklist.insert(3,"nodex")
linklist.print_linkedlist()
linklist.delete(4)
linklist.print_linkedlist()
linklist.update(2,"update_node2")
linklist.print_linkedlist()
print(linklist.get(2))
print(linklist.get_length())
linklist.__reversed__()
linklist.print_linkedlist()

#### 执行结果

1
2
3
4
5
6
7
8
E:pythonworkspace>python nodelist.py
head-- node0 --> node1 --> node2 --> node3 -->None.linked list finished
head-- node0 --> node1 --> node2 --> nodex --> node3 -->None.linked list finished
head-- node0 --> node1 --> node2 --> nodex -->None.linked list finished
head-- node0 --> node1 --> update_node2 --> nodex -->None.linked list finished
update_node2
4
head-- nodex --> update_node2 --> node1 --> node0 -->None.linked list finished