Leecode19. 删除链表的倒数第 N 个结点——Leecode大厂热题100道系列
Posted 来老铁干了这碗代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leecode19. 删除链表的倒数第 N 个结点——Leecode大厂热题100道系列相关的知识,希望对你有一定的参考价值。
我是小张同学,立志用最简洁的代码做最高效的表达
以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言!
传送门——>Leecode大厂热题100道系列题解
题目描述
题目链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
给你一个链表,删除链表的倒数第 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
题解
先遍历一遍链表,求出长度,再将倒序换为正序,删除节点即可。
解链表题时要着重处理指针,防止指空。 可以采用图示法来解题
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
// 链表长度
int len = 0;
ListNode* temp = head;
while(temp) {
len++;
temp = temp->next;
}
// 从后往前计数 ——> 从前往后计数
n = len - n + 1;
if(n == 1) return head->next; // 节点为1 或 删除的是头结点的情况
ListNode* pre = new ListNode();
pre->next = head;
while(--n) {
pre = pre->next;
}
pre->next = pre->next->next;
return head;
}
};
以上是关于Leecode19. 删除链表的倒数第 N 个结点——Leecode大厂热题100道系列的主要内容,如果未能解决你的问题,请参考以下文章
算法leetcode|19. 删除链表的倒数第 N 个结点(rust重拳出击)