美文网首页
LeetCode 第19题:删除链表的倒数第 N 个结点

LeetCode 第19题:删除链表的倒数第 N 个结点

作者: 放开那个BUG | 来源:发表于2021-05-15 12:05 被阅读0次

    1、前言

    题目描述

    2、思路

    这道题一般人都能想到双指针解法,一个 start 一个 end,end 先走 n 步,然后 start、end 一起走,直到 end 走到链表的末尾。

    但是需要注意的是,删除的节点有可能就是第一个节点,此时需要特殊处理一下,直接将头节点删除,第二个节点作为首节点返回即可。删除头节点的条件是,end 一下就走到 null 了。

    3、代码

    class Solution {
        public ListNode removeNthFromEnd(ListNode head, int n) {
            if(head == null){
                return null;
            }
    
            ListNode start = head;
            ListNode end = head;
            while(n > 0){
                end = end.next;
                n--;
            }
    
            // 说明直接去掉第一个
            if(end == null){
                start = head;
                head = head.next;
                start = null;
                return head;
            }
    
            // 说明去掉的不是第一个
            while(end.next != null){
                start = start.next;
                end = end.next;
            }
    
            ListNode removeNode = start.next;
            start.next = removeNode.next;
            removeNode.next = null;
    
            return head;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 第19题:删除链表的倒数第 N 个结点

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