删除链表中指定值的节点
分析:
1.找到该节点的前节点
2.将该节点后节点的值复制过来,并删除其后节点
class Node:
def __init__(self,data):
self.data = data
self.next = None
return
class linklist:
def __init__(self):
self.head = None
self.tail = None
return
def add_item(self,item):
if not isinstance(item,Node):
item = Node(item)
if not self.head:
self.head = item
else:
self.tail.next = item
self.tail = item
return
def get_values(self):
current_node = self.head
res = []
while current_node:
res.append(current_node.data)
current_node = current_node.next
return res
a = [13,5,72,4,65,23,76,42,62]
l = linklist()
for x in a:
l.add_item(x)
print(l.get_values())
# 删除链表中值为x的节点 没有重复值
# method 1, find the pre node
targetvalue = 13
current_node = l.head
if current_node.data == targetvalue:
l.head = current_node.next
current_node.next = None
print(l.get_values())
targetvalue = 72
pre = l.head
current_node = l.head.next
while current_node:
if current_node.data == targetvalue:
if not current_node.next:
pre.next = None
else:
pre.next = current_node.next
current_node.next = None
current_node = current_node.next
pre = pre.next
print(l.get_values())
# method 2, get the next's value and delete the next
targetnode = l.head.next.next.next.next.next.next
if targetnode.next == None:
current_node = l.head
while current_node.next.next:
current_node = current_node.next
current_node.next = None
else:
targetnode.data = targetnode.next.data
targetnode.next = targetnode.next.next
print(l.get_values())