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

Posted ACBingo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19. 删除链表的倒数第N个节点相关的知识,希望对你有一定的参考价值。

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

1A,开心~

注意,题目有进阶要求,只允许扫链表1次,
很多链表题跟这个思路一样,在遍历链表的时候,维护一个距离与当前头指针为(n+1)的尾巴标记P即可,当扫到链表结尾的时候,此时P正好指向待删除节点的前一个节点

注意几个细节处理:
0:注意P的初始化
1:n>链表长度时,无需处理
2:n == 链表长度时,P此时仍没有指向任何一个节点,需要特判把头节点删除

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode org = head;
        ListNode ans = null;

        int cnt = 0;

        while (head != null) {
            head = head.next;
            cnt++;
            if (cnt > n) {
                if (ans == null) ans = org;
                else {
                    ans = ans.next;
                }
            }
        }

        if (ans != null && n > 0) {
            if (n == 1) {
                ans.next = null;
            } else {
                ans.next = ans.next.next;
            }
        }

        if (cnt == n) {
            org = org.next;
        }

        return org;
    }
}

以上是关于19. 删除链表的倒数第N个节点的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

代码随想录算法训练营第四天 | 24.两两交换链表中的节点19.删除链表的倒数第N个节点160.相交链表142.环形链表II