链表算法题和静态链表

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

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

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

相关推荐
大侠归来7 小时前
C 语言 | 在函数中操作数组
c语言·c++·算法
怕浪猫11 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i13 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
7yewh13 小时前
SLAM 三维空间刚体运动(2)
数据结构·人工智能·机器人·嵌入式·slam
ai小陈13 小时前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力
Evand J13 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
bigdata-余建新13 小时前
week10
ai
leikooo13 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
郑同学的笔记14 小时前
【c++随笔28】strcmp 和 memcmp对比
开发语言·c++
JackSparrow41414 小时前
和AI一起将全部CSDN博文迁移到个人博客站
人工智能·程序人生·ai·github·cloudflare·astro·静态博客