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;

    }
相关推荐
海绵宝宝转agent11 分钟前
leetCode100算法开源笔记分享
笔记·算法
写后端的胖头鱼33 分钟前
时间复杂度 & 空间复杂度
java·数据结构·算法·时间复杂度·空间复杂度
hahaha601636 分钟前
黑体轨迹和色温--光源白点
人工智能·嵌入式硬件·算法·计算机视觉
海绵宝宝转agent38 分钟前
基于Redis ZSet+AOP+注解实现限流注解算法
数据库·redis·算法
50万马克的面包1 小时前
顺序表和链表_精华知识点_CSDN博客
数据结构·链表
All for pursuit.2 小时前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青2 小时前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
Jasmine_llq2 小时前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法
Jasmine_llq2 小时前
《P17462 [GESP202609 八级] 末班车》
算法·dijkstra 算法·最大化版本,求最长可行值·建反向图(逆图 / 反转边)·多源 dijkstra 思想·对每个终点单独跑一遍djst·离线预处理 + 在线查询
the3clipse2 小时前
H.265熵编码核心:CABAC自适应二进制算术编码详解——如何将语法元素高效压缩为比特流
人工智能·算法·视频编码·h.265·hevc·cabac·cavlc