zoukankan      html  css  js  c++  java
  • 13:在O(1)时间内删除单向链表中的一个节点

    思路:如果从首部开始依次查找,那么时间是O(n).
    既然我们知道要删除的结点i,那么我们就知道它指向的下一个结点j,那么我们可以将j的内容复制到i,然后将i的指针指向j的下一个结点,这样虽然看起来我们删除的是j结点,但是实际删除的是i。
    此外还要考虑的问题是:如果结点不存在怎么办?如果结点是尾结点怎么办?链表只有一个结点?
    public class deleteInode {
    
        public static void main(String[] args) {
             ListNode head = new ListNode(0);
             ListNode node1 = new ListNode(1);
             ListNode node2 = new ListNode(2);
             ListNode node3 = new ListNode(3);
             head.setNext(node1);
             node1.setNext(node2);
             node2.setNext(node3);
             delete(head,node2);
             printListNode(head);
             
        }
        public static void delete(ListNode head,ListNode target){
            if(head==null||target==null){
                return;
            }
            if(head.getNext()==null){
                if(head==target){
                    head=null;
                }else{
                    return;
                }
            }
            if(target.getNext()==null){
                ListNode currentNode = head;
                while(currentNode.getNext()!=null){
                    currentNode = currentNode.getNext();
                }
                currentNode.setNext(null);
            }
            if(target.getNext()!=null){
                target.setValue(target.getNext().getValue());
                if(target.getNext().getNext()!=null){
                target.setNext(target.getNext().getNext()); 
                }else{
                    target.setNext(null);
                }
            }
        }
        public static void printListNode(ListNode head){
            ListNode current = head;
            while(current!=null){
                System.out.println(current.getValue()+"...");
                current = current.getNext();
            }
        }
    
    }
    
  • 相关阅读:
    实战DeviceIoControl 之中的一个:通过API訪问设备驱动程序
    hibernate官方新手教程 (转载)
    C++ 清空消息队列
    java中接口的定义与实现
    Scrum 学习笔记
    Ubuntu中全然卸载Nginx
    ScrollView 在嵌套 ViewPager 时出现的问题
    Java的递归算法
    Android GPS获取当前经纬度坐标
    【数据结构】——排序算法——1.1、直接插入排序
  • 原文地址:https://www.cnblogs.com/andy-zhou/p/6547897.html
Copyright © 2011-2022 走看看