2026.1.20力扣刷题笔记

题目:

解答:

cpp 复制代码
struct ListNode *detectCycle(struct ListNode *head) {
    struct ListNode* fast=head;
    struct ListNode* slow=head;
    while(fast!=NULL){
        slow=slow->next;
        if(fast->next!=NULL)
            fast=fast->next->next;
        else
        return NULL;
        if(fast==slow){
            struct ListNode* p=head;
            while (p != slow) {
                p = p->next;
                slow = slow->next;
            }
            return p;
        }
    }return NULL;
}
cpp 复制代码
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        unordered_set<ListNode*> visited;
        while(head!=nullptr){//NULL时空整数,nullptr表示空指针
            if(visited.count(head)){//计算统计head在集合里面出现几次,出现过即入口指针
            return head;
            }
            visited.insert(head);
            head=head->next;
        }
        return nullptr;
    }
};
心得:法一是王道原题,记得当时就是根据快慢指针指向不同而作为解法,abc为三段,快慢相遇时有如下表达式,所以能推算出b。
法二:用哈希指针集合表示,count函数来判定出现的次数,返回nullptr代表无环。

题目:

解答:

cpp 复制代码
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    int count=0;
    struct ListNode* p=head;
    struct ListNode* dummy=(struct ListNode*)malloc(sizeof(struct ListNode));
    dummy->next=head;
    for(p;p!=NULL;p=p->next)
        count++;
    if(count<n)
    return NULL;
    p=dummy;
    for(int i=0;i<count-n;i++){
        p=p->next;
    }
    struct ListNode* q=p->next;
    p->next=p->next->next;
    free(q);
    return dummy->next;
}
心得:使用哑节点,便于处理头结点,然后找到要删除的点(count-n),删除节点然后释放空间。需要注意的是,dummy需要申请空间,防止变成野指针。

题目:

解答:

cpp 复制代码
struct ListNode* swapPairs(struct ListNode* head) {
    struct ListNode* dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
    dummy->next = head;
    struct ListNode* prev = dummy;
    while(prev->next!=NULL&&prev->next->next!=NULL){
        struct ListNode* first=prev->next;
        struct ListNode* second=first->next;
        prev->next=second;
        first->next=second->next;
        second->next=first;
        prev=first;
    }
    return dummy->next;
}
心得:我原本想的思路是创建一个新的链表,先指向所有偶次链表节点,然后插入所有奇数链表节点,但是实现起来琐碎且复杂。答案采用直接dummy链接整个head链表,再内部调整两个节点的顺序,代码超级简单,记住这种思路。
相关推荐
地平线开发者3 小时前
【模型轻量化专题】衡量模型轻量性的指标
算法
学习星球6 小时前
OFDM技术精讲:正交性推导、循环前缀原理与80行Python链路仿真(附实测数据)
算法·面试·前端框架
alphaTao12 小时前
LeetCode 每日一题 2026/8/24-2026/8/30
python·算法·leetcode
Interview Aid11213 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
顶点多余1 天前
那些在算法中适合巩固的知识点---1
java·前端·算法
罗西的思考1 天前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
hahaha60161 天前
HLS高层次综合设计技巧--C++类和模板
图像处理·人工智能·算法·计算机视觉
多弗朗皮卡丘1 天前
算法详解4:买卖股票的最佳时机系列(上)
算法
sakiko_1 天前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
自小吃多1 天前
器件移动、旋转、镜像、对齐、等间距操作笔记
笔记·嵌入式硬件