高效删除链表中节点

作者: 王韩峰 | 来源:发表于2017-02-23 21:40 被阅读133次

在时间复杂度为O(1)、空间复杂度为O(1)的情况下,删除单向链表中节点。

大众思维:找到给出要删除节点的前一个节点,将前一个节点指向要删除节点的下一个节点,再释放删除节点的空间。但是,时间复杂度O(n),空间复杂度O(1)。

逆向思维:将给出的待删除节点指向待删除节点的下一个的下一个节点,并将下一个节点中的数据复制到待删除节点中,再释放待删除节点的下一个节点。变相的等于删除了待删除节点的下一个节点。满足时间复杂度和空间复杂度。

代码如下:


//Node Class

package LinkList;

public class Node {
    public int val;
    public Node next;
    
    public Node() {
        // TODO Auto-generated constructor stub
        this.val = new Integer(-1);
        this.next = null;
    }
    
}


//main
package LinkList;

import org.omg.CORBA.FREE_MEM;

public class DeleteNode {
    public void deleteNode(Node deleteNode) {
        deleteNode.val = deleteNode.next.val;
        deleteNode.next = deleteNode.next.next;
        //释放多余节点
        
    }
    public static void main(String[] args) {
        Node node[];
        node = new Node[10];
        for (int i = 0; i < node.length; i++) {
            node[i] = new Node();
        }
        for(int i=0;i<9;i++){
            node[i].val = i;
            node[i].next = node[i+1];
        }
        node[9].next = node[7];
        node[9].val = 9;
        
        for (int i = 0; i < node.length; i++) {
                System.out.println(node[i].val + ":" + node[i].next.val);
        }
        
        new DeleteNode().deleteNode(node[7]);
        
        for (int i = 0; i < node.length; i++) {
            System.out.println(node[i].val + ":" + node[i].next.val);
        }
        
    }
}


相关文章

  • 数据结构与算法之链表面试题(四)

    目录 删除链表中的节点反转一个链表递归实现迭代(非递归)实现 一 删除链表中的节点 237. 删除链表中的节点 说...

  • 高效删除链表中节点

    在时间复杂度为O(1)、空间复杂度为O(1)的情况下,删除单向链表中节点。 大众思维:找到给出要删除节点的前一个节...

  • 18-删除链表节点、删除链表重复节点

    1. 删除链表节点 2. 删除链表中的重复节点 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没...

  • leecode刷题(20)-- 删除链表中的节点

    leecode刷题(20)-- 删除链表中的节点 删除链表中的节点 描述: 请编写一个函数,使其可以删除某个链表中...

  • 算法相关笔记,持续更新中...

    单链表 1.删除单链表中的指定节点: 2.单链表中删除指定数值的节点方法一:利用栈 3.单链表中删除指定数值的节点...

  • 删除链表中重复的节点

    删除链表中重复的节点在一个排序的链表中,如何删除重复的节点?

  • 链表删除--二级指针

    教科书上的链表删除节点 也可以这样(leveldb中LRUCache链表使用的该方法删除节点)

  • 1.单链表常用操作

    1.删除单链表中的指定节点 2.删除单链表中指定值的节点 (1). 利用栈删除单链表指定值的节点 (2). 用普通...

  • 237. Delete Node in a Linked Lis

    删除链表中的节点,用于删除单链表中某个特定节点。在设计函数时需要注意,无法访问链表头节点head,只能直接访问要被...

  • Leetcode总结 -- 链表

    目录 链表的基本操作 改/遍历:while(?) 查: 返回倒数K个节点 增/删除:反转链表,删除链表中的重复节点...

网友评论

    本文标题:高效删除链表中节点

    本文链接:https://www.haomeiwen.com/subject/tmfiwttx.html