lintcode:在O(1)时间复杂度删除链表节点

题目:

在O(1)时间复杂度删除链表节点

 给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。

样例

给定 1->2->3->4,和节点 3,返回 1->2->4。

解题:

方法好贱,先把要删除节点后面一个节点的值赋给删除节点,这样需要删除节点就删除了,再把删除节点指向删除节点后面节点的节点

就像这样:

        node.val = node.next.val;
        node.next = node.next.next;

Java程序:

《lintcode:在O(1)时间复杂度删除链表节点》
《lintcode:在O(1)时间复杂度删除链表节点》

/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */ 
public class Solution {
    /**
     * @param node: the node in the list should be deleted
     * @return: nothing
     */
    public void deleteNode(ListNode node) {
        // write your code here
        if(node==null)
            return;
        node.val = node.next.val;
        node.next = node.next.next;
        
    }
}

View Code

总耗时: 2447 ms

Python程序:

 

《lintcode:在O(1)时间复杂度删除链表节点》
《lintcode:在O(1)时间复杂度删除链表节点》

"""
Definition of ListNode
class ListNode(object):

    def __init__(self, val, next=None):
        self.val = val
        self.next = next
"""
class Solution:
    # @param node: the node in the list should be deleted
    # @return: nothing
    def deleteNode(self, node):
        # write your code here
        if node==None:
            return
        node.val = node.next.val
        node.next = node.next.next

View Code

总耗时: 312 ms

    原文作者:水滴失船
    原文地址: https://www.cnblogs.com/theskulls/p/4871969.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞