链表算法题和静态链表

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

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

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

相关推荐
wuminyu29 分钟前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
GreenTea2 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
Bode_20022 小时前
多资源规划(含生产调度、库存管理及产能规划)的创新优化算法
算法·调度
开心就多写,一点就开心2 小时前
导演视听语言与分镜系统笔记(一):景别系统、机位视点与时空连贯性设计
笔记·aigc·镜头·电影
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出蛋糕订单中的“VIP独特口味“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
土司大王3 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
微三云生态系统架构师-彭丹3 小时前
远方好物S2B2C系统架构:一级分销与保证金托管的合规技术实现
人工智能·算法
土司大王3 小时前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode
Logic1014 小时前
C语言/数据结构位运算题解:异或XOR找出飞行棋中的“独特颜色棋子“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
爱吃苹果的日记本4 小时前
数据结构第三课(时间复杂度)
数据结构·学习