一、删除链表的倒数第N个节点的题目描述与链接
19.删除链表的倒数第N个节点的链接如下表所示,您可直接复制下面网址进入力扣学习,在观看下面的内容之前您一定要先做一遍哦,以便让我印象更深刻!!!
https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/
题目描述如下:
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1 输出:[]
示例 3:
输入:head = [1,2], n = 1 输出:[1]
提示:
- 链表中结点的数目为
sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
进阶:你能尝试使用一趟扫描实现吗?
二、Java版
该题可用虚拟头结点和双指针的方法解决,具体代码如下所示:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummyhead=new ListNode(-1); //创建虚拟头结点
dummyhead.next=head;
ListNode fast=dummyhead; //快指针
ListNode slow=dummyhead; //慢指针
for(int i=0;i<=n;i++){
fast=fast.next;
}
while(fast!=null){
fast=fast.next;
slow=slow.next;
}
if(slow.next!=null){
slow.next=slow.next.next;
}
return dummyhead.next;
}
}
三、删除链表的倒数第N个节点的具体思路
- 定义slow指针和fast指针,初始值为虚拟头节点。如图一:
- fast首先走n+1步,slow才能指向删除节点的上一个节点,如图二:
- slow和fast同时移动,直到fast指向末尾,如图三:
- 删除slow指向的下一个节点,如图四:
最后,感谢各位读者的阅读与支持,您的支持是我前进的动力!我希望我的博文能够带给您有用的算法知识和启发。希望本题对大家有帮助,谢谢各位读者的支持!!!