删除链表的倒数第 n 个节点

Posted zhuge134

tags:

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

难度: 中等

leetcode地址:

https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/

 

分析:

1. 这题解题思路也不难,两个指针fast, slow,fast先走n步,然后两个一起走,fast走到最后为null的时候,slow正好走到倒数第n个节点,

但是在单向链表中删除一个节点其实需要知道它的前直接点,所以我们需要少走一步,即走到fast为最后一个节点的时候就要停止,这个判断条件就是fast.next==null

2. 另外我们需要分析一下特殊情况,当n正好等于链表长度时,这时实际上要删除的是头结点,这个判断条件是当fast 指针第一轮走n步之后,fast==null,这种情况直接返回head.next

 

技术图片

 

代码:

public class RemoveNthFromEnd {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast=head,slow=head;
for(int i=0;i<n;i++){
fast=fast.next;
}
if(fast==null){
return head.next;
}
while(fast.next!=null){
fast=fast.next;
slow=slow.next;
}
slow.next=slow.next.next;
return head;
}
}

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

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

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

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

删除链表的倒数第N个节点(三种方法实现)

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

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