# 【数据结构】链表 的介绍与python实现 下篇

class Node():
def __init__(self, data, next=None):
self.data = data
self.next = next # next为下一节点的内存地址

def __init__(self):

def printList(self):
'''打印所有data'''
nums = list()
while tmp:
nums.append(str(tmp.data))
tmp = tmp.next
if len(nums) > 0:
print('->'.join(nums))

'''链表头部插入'''
new_node = Node(data)
if self.head != None:

def insert_after(self, node, data):
'''指定节点后面插入'''
if (not isinstance(node, Node)):
print('node参数不为Node类')
return
if not node or not data:
print('node或data为空')
return
new_node = Node(data)
new_node.next = node.next
node.next = new_node

def insert_before(self, node, data):
'''指定节点前面插入'''
if (not isinstance(node, Node)):
print('node参数不为Node类')
return
if not node.data or not data:
print('node或data为空')
return
if node == self.head:
return
while current.next and current.next != node:
current = current.next
# 循环终止两个情况，第一current.next为空，说明node节点没有找到
if not current.next:
print('node不存在')
return
# 第二current.next 此时就是 node
new_node = Node(data)
new_node.next = node
current.next = new_node

def find_by_value(self, data):
'''根据数值data寻找，返回data所在节点地址'''
while p and p.data != data:
p = p.next
if not p:
print('未找到值为%s的节点' % data)
return
return p

def find_by_index(self, data):
'''根据数值索引，寻找第data个节点'''
position = 0
while p and position != data:
p = p.next
position += 1
if not p:
print('索引值%s已超过链表长度' % data)
return
return p

def delete_by_node(self, node):
'''根据节点删除'''
if not isinstance(node, Node):
print('node参数不为Node类')
return
if not current or not node:
print('链表为空或node为空')
return
while current and current.next != node:
current = current.next
if not current:
print('未找到匹配的节点')
return
current.next = node.next

def delete_by_value(self, data):
'''根据数值删除'''
if not current or not data:
print('链表为空或data为空')
return
if self.head.data == data:
return
while current.next and current.next.data != data:
current = current.next
if not current.next:
print('未找到匹配的data')
return
current.next = current.next.next

def reverse_self(self):
'''单链表反转'''
print('链表为空或链表只有一个节点，不用反转')
return
while node2:
tmp = node2.next
node2.next = node1
node1 = node2
node2 = tmp


A = Linked_list()
A.printList()
# 打印结果为：
# 4->3->2
A.printList()
# 打印结果为：
# 4->3->5->2
A.reverse_self()
A.printList()
# 打印结果为：
# 2->5->3->4


## 单链表反转

def reverse_self(head):
'''单链表反转'''
if (head is None) or (head.next is None):
print('链表为空或链表只有一个节点，不用反转')
node1 = None
while node2:
node1, node1.next, node2 = node2, node1, node2.next
return node1


02-27 331

04-11 409

09-18 567

08-05 239

04-12 7719

08-13 1898

08-14 2319

10-10 2万+

07-31 197

01-20 316

#### 线性表（顺序表，线性链表，循环单链表，双向链表）

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。