链表问题---一种怪异的节点删除方式

【题目】

  链表的节点类型是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值