删除链表的节点——jzoffer

题目一:在O(1)时间内删除链表的节点

给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点,链表节点与函数的定义如下:

class NodeLinkList:
    def __init__(self, value=None):
        self.value = value
        self.next = None
        
def delete_node(head_node, delete_node):
    pass

删除指定节点,一般的方法是通过遍历,找到该节点的pre节点,将其的next设置为【删除节点】的next,这个方法的时间是O(n)。另一种方法是,将【删除节点】的next复制到【删除节点】上,然后删除【删除节点】的next。

这个时候需要考虑几种情况,一、【删除节点】是尾部节点;二、链表只有一个节点;三、【删除节点】在中间某处。

python无法删除节点对象

def delete_node(head_node, del_node):
    if not head_node or not del_node:
        return 
    # 【删除节点】是内部结点,不是尾节点
    if del_node.next:
        next_node = del_node.next
        del_node.value = next_node.value
        del_node.next = next_node.next
        next_node.value = None
        next_node.next = None
    # 【删除节点】是尾节点,且链表只有一个节点
    elif head_node == del_node:
        head_node.next = None
        head_node.value = None
    # 【删除节点】是尾节点,链表有多个节点
    else:
        node = head_node
        while node.next != del_node:
            node = node.next
        node.next = None
        del_node.next = None
        del_node.value = None
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 9,198评论 0 27
  • 这里写接口用的Python3,用的flask+pymysql.cursors 导入mysql文件 appstore...
    枫韵海阅读 2,454评论 0 1
  • 一九七六的唐山大地震,夺走了无数人的生命,包括我的父亲,怀着无比沉重的心情,去祭奠老人家,愿他在天之灵,永远安息。...
    福平刘阅读 1,774评论 0 0
  • ①复习了常爸的英文绘本---little mouse ② 听鹅妈妈来磨耳朵1--15 已经会听很多了,但是不能跟着...
    Lynn_1f06阅读 903评论 0 1