题目:在O(1)时间内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。
解题思路:我们要删除节点i,先把i的下一个节点j的内容复制到i,然后把i的指针指向节点j的下一个节点。此时再删除节点j,其效果等同于把节点i删除了。
class LNode: def __init__(self): self.data = None # 指针域 self.next = None # 数据域 class Solution: # 创建链表 def create_link(self): head = LNode() temp = head i = 1 while i<=8: tmp = LNode() tmp.data = i temp.next = tmp temp = tmp i += 1 return head # 输出链表 def print_link(self, head): temp = head.next while temp!=None: print(temp.data) temp = temp.next # 删除链表结点 def del_link_node(self, head, delNode): # 要删除的结点不是尾结点 if delNode.next!=None: delNode.data = delNode.next.data delNode.next = delNode.next.next # 链表只有一个节点,删除头结点 elif head==delNode: head = None # 链表中有多个结点,删除尾结点 else: temp = head while temp.next!=delNode: temp = temp.next temp.next = None return head if __name__=="__main__": solution = Solution() head = solution.create_link() delNode = head.next.next # 删除的结点 del_head = solution.del_link_node(head, delNode) solution.print_link(del_head)
