力扣 19删除链表的倒数第 N 个结点
Posted 霜序0.2℃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣 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]
提示:
链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
解释与代码
方法有三种:
- 最普通的长度计算(遍历一遍,然后第二次扫描到的时候处理)
- 用栈进行辅助(入栈,弹出时计数)
- 双指针(first比second超前n)
以栈的写法为代码示例
class Solution
public:
ListNode* removeNthFromEnd(ListNode* head, int n)
stack<ListNode*> sl;
ListNode* sw = head;
while (head)
sl.push(head);
head = head->next;
int cnt = 0;
while (1)
cnt++;
if (cnt == n)
if (sl.size() == 1) // l
return sl.top()->next;
else
sl.pop();
sl.top()->next = sl.top()->next->next;
return sw;
sl.pop();
return head;
;
以上是关于力扣 19删除链表的倒数第 N 个结点的主要内容,如果未能解决你的问题,请参考以下文章
力扣JS 19. 删除链表的倒数第 N 个结点 面试题 02.07. 链表相交