LeetCode:链表

链表中环的入口节点

解题思路 :

记住x = z就行,因此slow和fast相遇时,分别从头结点和相遇节点启动一个步伐一致(1)的指针,其相遇的结点就是入口!

cpp 复制代码
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        if(pHead == nullptr) return pHead;

        ListNode* slow = pHead;
        ListNode* fast = pHead;

        while(fast != nullptr && fast->next != nullptr){
            slow = slow->next;
            fast = fast->next->next;

            if(slow == fast){
                ListNode* a = pHead;
                ListNode* b = slow;

                while(a != b){
                    a = a->next;
                    b = b->next;
                }
                return a;
            }
        }
        return nullptr;
    }
};

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

思路:【双指针】

step1:给链表添加表头preHead,处理删除掉第一个元素时比较方便;

step2:快指针fast,先在链表上走n步 !

step3:慢指针slow(指向原始链表头head),代表当前元素;前序节点pre指向添加的表头preHead(删除链表节点时需要pre )

step4:slow/fast同步移动,当fast到达链表尾部(NULL),slow正好到了倒数第n个元素位置;

step5:最后将该节点的前序节点pre指针指向该节点next的节点(删掉这个节点);

cpp 复制代码
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        // write code here
        ListNode* preHead = new ListNode(-1);
        preHead->next = head;

        //当前节点
        ListNode* slow = head;
        //前序节点
        ListNode* pre = preHead;

        ListNode* fast = head;

        while(n--){
            if(fast == nullptr){
                return nullptr;
            }
            fast = fast->next;
        }

        while(fast != nullptr){
            fast = fast->next;
            pre = pre->next;
            slow = slow->next;
        }
        pre->next = slow->next;

        return preHead->next;

    }
相关推荐
文丑颜不良啊1 小时前
LeetCode2861~2880题目解析
java·leetcode
青少儿编程课堂2 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
在所不辞兄2 小时前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
I_belong_to_jesus13 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Code_Solitude20 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司20 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
文丑颜不良啊21 小时前
LeetCode2821~2840题目解析
java·leetcode
YLCHUP1 天前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
思麟呀1 天前
背包DP(01背包+完全背包)
c++·算法