zoukankan      html  css  js  c++  java
  • O(1)时间删除链表中的节点 13

    将当下一个节点的datanextNode拷贝到当前节点,即完成删除

       

    但不能用deleteNode=deleteNode.nextNode

       

    这样是让指针循环下移

       

    要求当前node不要后移,只要把后面的数据复制过来即可

       

    考虑首节点为空的情况

       

    考虑只有一个节点,删除头节点

       

    考虑有多个节点,删除尾节点,此时需要O(n)

       

    先循环找到deleteNode的前一个节点,让前一个节点的next置空

       

    考虑多个节点,删除中间节点

       

    将当下一个节点的data和nextNode拷贝到当前节点,即完成删除

       

    package deleteNode13;

       

    public class DeleteNode13 {

       

    static void deleteNode(ListNode head, ListNode deleteNode) {

    if (head == null) {

    System.out.println("list is empty,can't delete");

    return;

    }

    if (head.nextNode == null && deleteNode.equals(head)) {

    head = null;

    return;

    }

    if (deleteNode.nextNode == null) {

    ListNode node=head;

    while (node.nextNode!=deleteNode) {

    node=node.nextNode;

    }

    node.nextNode=null;

    return;

    }

    deleteNode.data = deleteNode.nextNode.data;

    deleteNode.nextNode=deleteNode.nextNode.nextNode;

       

    }

       

    public static void main(String[] args) {

    ListNode head=new ListNode();

    ListNode second=new ListNode();

    ListNode third=new ListNode();

    head.nextNode=second;

    second.nextNode=third;

    head.data=1;

    second.data=2;

    third.data=3;

    deleteNode(head, third);

    System.out.println(head.nextNode.nextNode.data);

    }

       

    }

       

    class ListNode {

    int data;

    ListNode nextNode;

       

    }

  • 相关阅读:
    python之virtualenv
    Markdown学习
    Python之进程(multiprocessing)
    python之concurrent.futures模块
    Python之线程
    LoadRunner(四)、检查点
    LoadRunner(三)、关联
    LoadRunner(二)、录制
    LoadRunner(一)、安装
    Jmeter(十九)逻辑控制器之if控制器
  • 原文地址:https://www.cnblogs.com/keedor/p/4385196.html
Copyright © 2011-2022 走看看