链表算法题和静态链表

例题1.206. 反转链表 - 力扣(LeetCode)

法一:

原地逆置法:不创建新的空间,只是修改指针域,让每个后继节点指向它的前驱结点

不要忘记把head指针也移过去

对于没有头结点的链表,head指针一开始指向1,而且也要用尾插法

假设1的前驱节点是NULL

循环结束条件:pre==temp==NULL

初始化:

temp,current都赋值为NULL,当pre!=NULL时,先让temp=pre→next,然后1指向NULL

current再指向pre,pre再指向temp

法三:试试递归,把原地逆置法用递归的思想写出来

cpp 复制代码
/**
 * 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* reverseList(ListNode* head) {
        
            ListNode* pre=head;
             ListNode* temp=head;
            if(pre!=NULL) 
            {
                pre=pre->next;
                head->next=NULL;
            }
           
            while(pre!=NULL)
            {
                head=pre;
                pre=pre->next;
                head->next=temp;
                temp=head;
            }
            return head;
        
    }
};

例2. LCR 140. 训练计划 II - 力扣(LeetCode)

在未知head链表长度的情况下,有两个思路

1.原地转置后找 2.先遍历一遍找到结点个数,再遍历找

3.快慢指针,遍历一次找到,快指针指向NULL,慢指针刚好指向答案

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : aval(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* trainingPlan(ListNode* head, int cnt) {
        //未知长度
        //双指针:l指针  r指针先走k个单位
        ListNode* l=head;
        ListNode* r=head;
        int i=0;
        while(r!=NULL&&i<cnt)
        {
            r=r->next;
            i++;
        }
        while(r!=NULL)
        {
            l=l->next;
            r=r->next;
        }

        return l;
    }
};

链表: 原地逆置 快慢指针(一前一后,按题意来)

静态链表:用数组模拟链表

相关推荐
布莱克6052 小时前
C++拷贝构造与拷贝赋值运算符的区别详解
开发语言·c++
Lyyaoo.2 小时前
【普通数组】【中等】除了自身以外数组的乘积
数据结构·算法·leetcode
threerocks2 小时前
《The AI-Native SDLC Playbook》万字拆解
算法·aigc·ai编程
夏玉林的学习之路2 小时前
算法8.环形队列
算法
九硕智慧建筑一体化厂家2 小时前
大型建筑集群智慧管控升级!IBMS系统实现多系统一体化融合管理
运维·人工智能·笔记·智慧城市
深蓝海拓3 小时前
基于QtPy (PySide6) 的PLC-HMI工程实战记录(五)为当前动作画面的信号连接变量
网络·笔记·python·学习·pyqt
小七-七牛开发者3 小时前
61 亿次请求背后:LLM Serving 的 Cache 与调度难题
ai·大模型·agent·token·工作流·claudecode·ai coding
摇滚侠3 小时前
《SpringBoot 3:入门与应用实战》第 6 章 Spring Boot 最佳实践 阅读笔记 10
java·spring boot·笔记
啦啦啦啦啦zzzz3 小时前
时间轮定时器
linux·服务器·网络·c++·定时器