来源:力扣 (LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
一、题目描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
例如:给定一个链表: 1->2->3->4->5, 和 n = 2 。当删除了倒数第二个节点后,链表变为 1->2->3->5 。
说明:
给定的 n 保证是有效的。
进阶:你能尝试使用一趟扫描实现吗?
二、题解
使用快慢指针,快指针先走 n 步,满指针再走,当快指针为空的时候满指针就是倒数第 n 个节点。
和 《剑指 offer 》面试题 22:链表中的倒数第 k 个节点类似,知识剑指 offer 中是返回倒数第 n 个节点,这道题目是删除倒数第 n 各节点,多了个删除操作。
三、代码
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
class Solution { public: ListNode *removeNthFromEnd(ListNode *head, int n) { ListNode *prev, *fast, *slow; prev = nullptr; fast = head; slow = head; // 快指针先走 n 步 while (fast && n--) fast = fast->next; // n 大于链表长度,直接返回 head if (!fast && n > 0) return head; // 遍历快慢指针,并备份慢指针 while (fast != nullptr) { prev = slow; fast = fast->next; slow = slow->next; } // 删除节点,注意删除的节点可能是链表收尾节点 if (prev) { // 如果删除的是最后一个节点,slow 为空 prev->next = slow ? slow->next : nullptr; return head; } else { // 删除的首节点,返回首节点的下一个节点 return head->next; } } }; |
![[leetcode]19-删除链表的倒数第N个节点](https://www.dyxmq.cn/wp-content/uploads/2020/02/74739-imageb1b50eb343776b42.png)


![[leetcode]199-二叉树的右视图](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/04/f24a8-image.png&w=280&h=210&a=&zc=1)
![[leetcode]198-打家劫舍](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/02/b1e35-image.png&w=280&h=210&a=&zc=1)

![【每日打卡】[leetcode]72-编辑距离](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/04/88c60-imageff84a6c5047db6ed.png&w=280&h=210&a=&zc=1)
![【每日打卡】[leetcode]460-LFU缓存](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/04/5b3f2-image.png&w=280&h=210&a=&zc=1)
![[leetcode]125-验证回文串](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/5bfa5-image.png&w=280&h=210&a=&zc=1)
![【每日打卡】[程序员面试宝典]17.16-按摩师](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/9ecc9-image.png&w=280&h=210&a=&zc=1)
![【每日打卡】[leetcode]876-链表的中间节点](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/64d0d-imagece778ab033c9d90d.png&w=280&h=210&a=&zc=1)
![【每日打卡】[剑指offer]面试题40-最小的k个数](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/c83c9-imagec745c425c670e18c.png&w=280&h=210&a=&zc=1)
![【每日打卡】[leetcode]-409最长回文子串](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/e5589-image788d511d7c1e839c.png&w=280&h=210&a=&zc=1)
![【每日打卡】[leetcode]面试题1.6-字符串压缩](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/776bc-image.png&w=280&h=210&a=&zc=1)
评论