19. 删除链表的倒数第N个节点
Posted ACBingo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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个节点的主要内容,如果未能解决你的问题,请参考以下文章
代码随想录算法训练营第四天 | 24.两两交换链表中的节点19.删除链表的倒数第N个节点160.相交链表142.环形链表II