zoukankan      html  css  js  c++  java
  • 面试题18:在O(1)时间内删除链表节点。

    public class DeleteNode {
        public static void main(String[] args){
            Solution18 solution18 = new Solution18();
            ListNode18 head = solution18.initLinkList(new ListNode18());
            ListNode18 toBeDeleted = head;
            while(toBeDeleted.next!=null){
                toBeDeleted=toBeDeleted.next;
            }
            solution18.printLinkList(head);
            solution18.deleteNode(head,toBeDeleted);
            solution18.printLinkList(head);
        }
    }
    
    class ListNode18{
        int value;
        ListNode18 next;
    }
    
    class Solution18{
        //初始化链表
        ListNode18 initLinkList(ListNode18 head){
    
            ListNode18 p=head;
            p.value=-1;
            for(int i=0; i<10; i++){
                ListNode18 nextNode = new ListNode18();
                nextNode.value=i;
                p.next=nextNode;
                p=nextNode;
            }
            return head;
        }
        //打印链表
        void printLinkList(ListNode18 p){
            while (p.next!=null){
                System.out.print(p.value+ " ");
                p=p.next;
            }
            System.out.print(p.value);
            System.out.println();
        }
    
        void deleteNode(ListNode18 listHead,ListNode18 toBeDeleted){
    
            if(listHead ==null || toBeDeleted ==null){
                return;
            }
            //如果要删除的结点不是最后一个结点
            if(toBeDeleted.next!=null){
                ListNode18 listNode18= toBeDeleted.next;
                toBeDeleted.value=listNode18.value;
                toBeDeleted.next=listNode18.next;
                listNode18.next=null;
            }else if(listHead == toBeDeleted){//链表只有一个节点
                listHead=null;
                toBeDeleted=null;
            }else{//链表有多个节点,删除尾节点
                ListNode18 p=listHead;
                while(p.next != toBeDeleted){
                    p=p.next;
                }
                p.next=toBeDeleted.next;
                toBeDeleted.next=null;
            }
    
        }
    }
  • 相关阅读:
    MySQL索引底层的实现
    mysql索引深入优化
    explain详解与索引最佳实践
    (MYSQL)回表查询原理,利用联合索引实现索引覆盖
    为什么重复值高的字段不能建索引(比如性别字段等)
    Spring的事务
    为什么要用Redis?Redis为什么这么快?
    spring AOP
    钩子教程
    钩子教程
  • 原文地址:https://www.cnblogs.com/Allen-win/p/8323915.html
Copyright © 2011-2022 走看看