一、要求
给链表的头结点和要删除的节点
二、思路及代码
由于单链表只能向后,不能向前,所以会造就要删的节点空间保存,下一个节点遭殃的情形,如下图所示:
根据只能向后的特性,对删除节点的位置进行分类讨论:
1、是尾节点也是头结点,即只有一个节点
2、是尾节点,没有下一个节点.需要找到前一个节点
3、普通节点
class ListNode():
def __init__(self,value=None):
self.val=value
self.next=None
def delnode(self):
self.val=None
self.next=None
def solution(headnode,Dnode):
if headnode.next==None:
Dnode.delnode()
return
if Dnode.next==None:
Hnode=headnode
while Hnode.next!=Dnode:
Hnode=Hnode.next
Hnode.next=None
return
else:
PassNode=Dnode.next
Dnode.val=Dnode.next.val
Dnode.next=Dnode.next.next
PassNode.delnode()
def print_listnode_val(Hnode):
a=[]
while Hnode.next :
a.append(Hnode.val)
Hnode=Hnode.next
a.append(Hnode.val)
print(a)
def main():
node1=ListNode(1)
node2=ListNode(2)
node3=ListNode(3)
node4=ListNode(4)
node5 = ListNode(5)
node1.next=node2
node2.next=node3
node3.next=node4
print_listnode_val(node1)
solution(node1, node4)
print_listnode_val(node1)
solution(node1, node3)
print_listnode_val(node1)
solution(node1, node1)
print_listnode_val(node1)
solution(node5, node5)
print_listnode_val(node5)
if __name__ == '__main__':
main()
三、运行结果
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[2]
[None]
四、思考与总结
用一个append 可以实现在同一行输出,简化测试输出结果长度