题目描述
在O(1)时间内删除链表节点。
给定单链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。
注意代码完整性,考虑以下三种情况
- 如果要删除的节点后面有节点,则将该节点内容复制到要删除的节点,并删除该节点。
- 如果要删除的节点在链表头部,直接删除该节点。
- 如果要删除的节点在链尾,遍历至该节点删除。
代码实现
class ListNode(object):
def __init__(self,x):
self.val=x
self.next=None
def __del__(self): #在对象删除时触发__del__(self),然后再删除对象自己。如果对象没有删除,程序结束时,会自动删除对象。
self.val=None
self.next=None
class Solution(object):
def deleteNode(self,head,delNode):
if not head or not delNode:
return None
#要删除的节点在链表中
if delNode.next!=None:
delNode.val=delNode.next.val
delNode.next=delNode.next.next
delNode.next.__del__()
#要删除的节点是头结点
elif delNode==head:
delNode.__del__()
#要删除的节点是尾节点
else:
node=head
while node!=delNode:
node=node.next
#node.next=None
delNode.__del__()
#测试
node1=ListNode(1)
node1.next=ListNode(2)
node1.next.next=ListNode(3)
L=Solution()
L.deleteNode(node1,ListNode(2))
print(node1.next.val)