LeetCode Delete Node in a Linked List

Question

Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4 after calling your function.

题目

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

样例
给定1->2->3->4,和节点3,删除 3 之后,链表应该变为1->2->4。

分析

一般,删除链表节点需要前置节点,需要n的时间复杂度。但这里要实现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
        node.val = node.next.val;
        node.next = node.next.next;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容