0
点赞
收藏
分享

微信扫一扫

刷题力扣19-删除链表倒数第N个节点

给你一个链表,删除链表的倒数第 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]

思路:双指针法

这道题删除操作很好写,但就是不知道怎么着这个倒数第n个节点,我们用双指针法,通过快慢指针的操作,让fast指针比slow指针快n步,那么当fast指针指向末尾的null时,slow指针是不是正好指向我们要删除的节点了?但为了方便去写代码,我们可以让fast指针比slow指针快n+1步,这样当fast指针指向末尾的null值时,slow指针正好指向被删节点的前一个节点,后面就顺理成章的好操作了。

如图:

刷题力扣19-删除链表倒数第N个节点_双指针

class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummyHead = new ListNode();
dummyHead.next = head;

ListNode slow = dummyHead;
ListNode fast = dummyHead;

while(n-- >= 0){
fast = fast.next;
}

while(fast != null){
slow = slow.next;
fast = fast.next;
}

//此时的slow指向被删节点的前一个节点
ListNode temp = slow.next.next; //设临时节点用来存储被删节点的下一个节点
slow.next = temp;

return dummyHead.next;

}
}

举报

相关推荐

0 条评论