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;

    }
相关推荐
橘子汽水1685 小时前
Leetcode 23,543合并K个升序链表,二叉树的直径
算法·leetcode·链表
huameinan狮子5 小时前
Adaboost算法原理与计算实例
算法
别怪我很水5 小时前
API中提供了VelocityTracker类用于计算触摸事件MotionEvent的速度,而其内部默认使用的方法就是最小二乘法,本 ...
算法·gitee·最小二乘法
Re.不晚8 小时前
挑战做100道力扣算法- DAY1
算法·leetcode·职场和发展
蓝悦无人机9 小时前
《Planning algorithms》读书笔记——第1章 引言
算法·读书笔记·规划算法·lavalle
Sagittarius_A*9 小时前
分组密码基础(二):Feistel 结构与 DES 的设计思想
算法·信息安全·密码学·des·数论
青山木9 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
alexwang21110 小时前
HDU 4348 详细题解
c++·算法·题解·hdu·主席树·可持久化数据结构·可持久化线段树