首页 > 其他分享 >206. 删除链表的倒数第n个节点

206. 删除链表的倒数第n个节点

时间:2024-11-27 17:14:11浏览次数:8  
标签:slow ListNode 206 nullptr fast next 链表 dummyHead 倒数第

题目

卡哥思路

卡哥是用双指针来解题,我没想出来这个思路。

精华部分:

双指针的经典应用,如果要到达倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾(nullptr)。slow所指向的节点就是倒数第n个节点。

跟着卡哥代码敲了下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *dummyHead = new ListNode(0);
        dummyHead->next = head;
        ListNode *fast = dummyHead;
        ListNode *slow = dummyHead;
        while (n-- && fast != nullptr)
        {
            fast = fast->next;
        }
        fast = fast->next;
        while (fast != nullptr)
        {
            slow = slow->next;
            fast = fast->next;
        }
        ListNode *tmp = slow->next;
        slow->next = tmp->next;
        delete tmp;
        ListNode *result = dummyHead->next;
        delete dummyHead;
        return result;
    }
};

标签:slow,ListNode,206,nullptr,fast,next,链表,dummyHead,倒数第
From: https://www.cnblogs.com/hisun9/p/18572668

相关文章

  • LeetCode21 合并两个有序链表
    LeetCode21合并两个有序链表题目链接:LeetCode21描述将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]思路方法一:迭代遍历两个列表,逐一比较时间复杂度:O(n+m)......
  • 【快慢指针技巧】:高效解决链表和数组问题(26,83,27)
    ......
  • 【每日一题】3206. 交替组
    给你一个整数数组 colors ,它表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] :colors[i]==0 表示第 i 块瓷砖的颜色是 红色 。colors[i]==1 表示第 i 块瓷砖的颜色是 蓝色 。环中连续3块瓷砖的颜色如果是 交替 颜色(也就是说中间瓷砖......
  • 24. 两辆交换链表中的节点
    题目卡哥的讲解很详细了卡哥视频讲解一如既往的把小细节都讲到了跟着卡哥的代码敲了下/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val......
  • LeetCode234 回文链表
    LeetCode234回文链表题目链接:LeetCode描述给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。示例输入:head=[1,2,2,1]输出:true输入:head=[1,2]输出:false方法一思路首先找到链表的中间结点mid:如果链表有奇数个节......
  • C进阶 结构体与链表
    文章目录一,回顾一点结构体与指针二,结构体怎么与链表联系在一起三,链表的头插法和尾插法四,删除特定的节点和插入特定的节点(虚拟头结点实现)前言这里讲述的是链表与结构体的关系,把两个联系在一起可以很好的把杂乱的数据通过链表联系在一起,这样可以更加便利去修改数据和维护......
  • Swift 实现链表重新排列:L0 → Ln → L1 → Ln-1
    前言本题由于没有合适答案为以往遗留问题,最近有时间将以往遗留问题一一完善。143.重排链表不积跬步,无以至千里;不积小流,无以成江海,Swift社区伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。难度水平:中等摘要链表的重新排列是链表操作的......
  • 【数据结构】双向链表、单向循环链表、双向循环链表、栈、链栈
    目录一、双向链表定义类和封装函数以及测试样例如下:注意事项:二、循环链表单循环列表的类和函数封装如下:注意事项: 三、双向循环链表结点类和双循环链表的定义部分函数封装之判空和尾插双循环链表遍历双循环链表尾删完整测试以及结果:四、栈顺序栈顺序栈本质以及......
  • LeetCode24 两两交换链表中的节点
    LeetCode24两两交换链表中的节点题目链接:LeetCode24描述给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例输入:head=[1,2,3,4]输出:[2,1,4,3]思路代码classSolution{publicListNodeswapPairs(ListNodehead){ListNodedummy=......
  • 206. 反转链表
    题目自己一开始的思路是对链表的每个节点的val进行更改,然后就没有然后了……没写出来然后看了卡哥的讲解感触最深的点是卡哥是让结点间的指向发生改变(换句话说,改变了节点的next),然后顺着这个思路卡哥给出了两个方法:双指针法和递归法。特别要给卡哥的视频讲解点个大大的赞,所有......