剑指offer--面试题13:在O(1)时间删除链表节点

来源:互联网 发布:小型企业网络设计方案 编辑:程序博客网 时间:2024/05/29 02:27

题目描述

给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
python实现:
# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def deleteNode1(self, node):        """        :type node: ListNode        :rtype: void Do not return anything, modify node in-place instead.        注意:只给了要删除的节点,没有给链表头节点,那么就要想办法利用该结点达到删除的目的。        题目中特意强调了要删除的节点不是尾节点,所以我们可以使用这种办法:将要给定的节点后面的节点的值        依次往前一个节点复制,就像数组中元素往前移一样,最后删除掉最后一个结点        """        p = node        node = None        while p.next:            p.val = p.next.val            pre = p            p = p.next        pre.next = None        #AC        
    #法2:    def deleteNode(self, node):        #实际上只要O(1)的时间复杂度就好        #把给定节点的后面节点的值拷贝过来后,直接将当前结点链接到后面节点的下一个结点就好        node.val = node.next.val        node.next = node.next.next                


0 0