Leetcode.19 删除链表的倒数第 N 个结点

编程入门 行业动态 更新时间:2024-10-10 12:20:45

Leetcode.19 删除链表的倒数第 N 个<a href=https://www.elefans.com/category/jswz/34/1765314.html style=结点"/>

Leetcode.19 删除链表的倒数第 N 个结点

题目链接

Leetcode.19 删除链表的倒数第 N 个结点 mid

题目描述

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

提示:
  • 链表中结点的数目为 s z sz sz
  • 1 ≤ s z ≤ 30 1 \leq sz \leq 30 1≤sz≤30
  • 0 ≤ N o d e . v a l ≤ 100 0 \leq Node.val \leq 100 0≤Node.val≤100
  • 1 ≤ n ≤ s z 1 \leq n \leq sz 1≤n≤sz

解法一:栈

用一个栈 s t k stk stk,先将所有链表节点入栈。

然后再弹出 n n n 个节点,此时栈顶节点就是 倒数第 n + 1 n + 1 n+1 个节点。

我们直接让 倒数第 n + 1 n + 1 n+1 个节点 指向 倒数第 n − 1 n - 1 n−1 个节点,这样就把 倒数第 n n n 个节点删除了。

注意: 由于可能弹出全部的节点,栈可能为空,所以我们要对边界条件做特殊处理。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {stack<ListNode*> stk;ListNode* cur = head;while(cur){stk.push(cur);cur = cur->next;}for(int i = 0;i < n;i++) stk.pop();if(stk.empty()) return head->next;ListNode* pre = stk.top();pre->next = pre->next->next;return head;}
};

解法二:双指针

我们开始让 f a s t , s l o w fast ,slow fast,slow 分别指向 链表头节点 h e a d head head;

接着让 f a s t fast fast 先走 n n n 步,此时 f a s t fast fast 和 s l o w slow slow 之间就间隔 n n n 个节点。

接着再让 f a s t , s l o w fast,slow fast,slow 往后移动,当 f a s t fast fast 为空的时候说明此时 s l o w slow slow 就是 倒数第 n n n 个节点。

我们在删除这个 倒数第 n n n 个节点即可。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy = new ListNode(-1);ListNode* pre = dummy;pre->next = head;ListNode* fast = head , *slow = head;while(n--){fast = fast->next;}while(fast){pre = pre->next;slow = slow->next;fast = fast->next;}pre->next = pre->next->next;return dummy->next;return head;}
};

更多推荐

Leetcode.19 删除链表的倒数第 N 个结点

本文发布于:2023-12-07 22:52:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1671862.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:结点   倒数   链表   Leetcode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!