【题目】
链表的节点类型是int型,给定一个链表中的节点node,但不给定整个链表的头节点。如何在链表中删除node?请实现这个函数,并分析这么做会出现哪些问题。
要求:时间复杂度O(1)。
【基本思路】
实现方法很简单,令node节点的值等于下一个节点的值,之后删除node的下一个节点即可。这样做有很大的问题:
问题一:无法删除最后一个节点,因为最后一个节点没有next节点,也不能直接将最后一个节点设置成null,因为null在系统中是一个特定的区域,也就是说即使将node设置成null,node的上一个节点的next指针指向的内存区域还是node没有设置成null时候的那个内存区域。
问题二:这种删除方式本质上根本删不了node节点,只是改变了node节点的值。这在实际工程中可能会带来很大问题。比如,工程上的一个节点可能代表很复杂的结构,节点值的复制会相当复杂,或者可能改变节点值这个操作都是被禁止的。再如:工程上的一个节点代表提供服务的一个服务器,外界对每个节点都有很多依赖,不能随便删除其他的节点。
【代码实现】
#python3.5
def removeNode(node):
if node == None:
return None
next = node.next
if next == None:
raise Exception("Can not remove last node.")
node.val = next.val
node.next = next.next