链表算法题和静态链表

例题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;
    }
};

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

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

相关推荐
I_belong_to_jesus5 小时前
C++关于分支预测的优化1
开发语言·c++·算法
爱学习的程序媛6 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
GISer_Jing7 小时前
Agent核心内容
后端·ai·langchain
Rabitebla7 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
一个天蝎座 白勺 程序猿8 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
Mininglamp_27188 小时前
Mano-P 低配部署:多模型并行的实际配置清单
ai·本地部署·mano-p
Martina_032110 小时前
AI生成的3D白模单帧没问题,镜头一移动就被挡?用6步检查遮挡与构图
图像处理·人工智能·数学建模·3d·ai·自然语言处理·游戏策划
坤坤子吖11 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
七夜zippoe12 小时前
Token 账单翻了 10 倍:Agent 成本失控的排查过程与优化实录
ai·agent·token·成本失控