一种怪异的节点删除方式

题目

  链表的节点类型是int型,给定一个链表中的节点node,但不给定整个链表的头节点。如何在链表中删除node?请实现这个函数,并分析这么做会出现哪些问题。

  要求:时间复杂度O(1)。

基本思路

  实现方法很简单,令node节点的值等于下一个节点的值,之后删除node的下一个节点即可。这样做有很大的问题:

  问题一:无法删除最后一个节点,因为最后一个节点没有next节点,也不能直接将最后一个节点设置成null,因为null在系统中是一个特定的区域,也就是说即使将node设置成null,node的上一个节点的next指针指向的内存区域还是node没有设置成null时候的那个内存区域。

  问题二:这种删除方式本质上根本删不了node节点,只是改变了node节点的值。这在实际工程中可能会带来很大问题。比如,工程上的一个节点可能代表很复杂的结构,节点值的复制会相当复杂,或者可能改变节点值这个操作都是被禁止的。再如:工程上的一个节点代表提供服务的一个服务器,外界对每个节点都有很多依赖,不能随便删除其他的节点
 

class node:
    def __init__(self,value):
        self.value = value
        self.next = None


def removeNodeWired(node):
    if node == None:
        return 

    next_ = node.next

    if next_ == None:
        return "the node is last node"


    node.value = next_.value
    node.next = next_.next

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值