• 删除链表的倒数第N个节点


    题目:

      给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

    思路:

      (一)分四种情况,效率较低  用数组

        将数据放入List 集合 进行判断

        1 list 只有一条数据,直接让头指针指向空

        2 删除数据为   倒数第一个 , 就让倒数第一个node 的 前一个 node.next  = null

        3 删除数据为   倒数最后一个  就让返回的头指针  指向head.next;

        4 剩下的就是  求出要删除的前一个node 指向 要删除的node 的下一个node

      (二)双指针

         保存一份头指针 temphead

        1 先遍历一遍 如果n == 节点数量 ,就返回 tempheadtemphead.next;

        2 如果不相等,则再从头开始遍历到删除节点前的那个节点,让他head.next = head.next.next 返回存储的头指针


    (一) 代码 暴力 枚举

    class Solution {
        public ListNode removeNthFromEnd(ListNode head, int n) {
            if(head == null){
                return head;
            }
            //保存头指针
            ListNode temphead = head;
            //存储list
            List<ListNode> list = new ArrayList<>();
            while(head != null){
                list.add(head);
                head = head.next;
            }
            //分四种情况 效率较低
            //1 只有一条数据,直接返回空
            //2 删除数据为 倒数第一个,就让倒数第一个的node 的 前一个node.next = null
            //3 删除数据为 倒数最后一个,就让返回的头指针 指向head.next
            //4 省下的就是   求出要删除的前一个node 指向 要删除的node 的下一个node
            if(list.size() == 1){
                temphead = null;
            }else if(n == 1){
                ListNode prenode = list.get(list.size() - 2);
                prenode.next = null;
            }else if(list.size() == n){
                temphead = temphead.next;
            }else{
                ListNode prenode = list.get(list.size() - n - 1);
                ListNode nextnode = list.get(list.size() - n + 1);
                prenode.next = nextnode;
            }
            return temphead;
        }
    }

    (二) 双指针

    class Solution {
        public ListNode removeNthFromEnd(ListNode head, int n) {
            if(head == null){
                return head;
            }
            //保存头指针
            ListNode temphead = head;
            int count = 0;
            while(head != null){
                count++;
                head = head.next;
            }
            if(count == n){
                return temphead.next;
            }
    
            //倒数,改成正数第几个
            n = count - n;
            count = 1;  //注意这里,从一开始
            head = temphead;
            while(head != null){
                if(count == n){
                    //让下一个 指向下下一个
                    head.next = head.next.next;
                    //返回头指针
                    return temphead;
                }else{
                    //向后移动指针
                    count++;
                    head = head.next;
                }
            }
            return temphead;
        }
    }

      





            
              JVM


      
  • 相关阅读:
    JDBC 关闭数据库连接与自动提交【转】
    va注解应用实例
    Java IO流操作汇总: inputStream 和 outputStream【转】
    dom4j,json,pattern性能对比【原】
    JSP中setattribute与setParameter的区别
    setAttribute()和getAttibute(),getParameter()
    org.hibernate.MappingException: Unknown entity
    SQL保留关键字不能用作表名
    缺jstl.jar包导致的代码出现异常
    sessionFactory
  • 原文地址:https://www.cnblogs.com/misscai/p/14927690.html
Copyright © 2020-2023  润新知