首页 > 其他分享 >206. 反转链表

206. 反转链表

时间:2024-11-25 20:25:40浏览次数:8  
标签:pre ListNode cur val 206 反转 nullptr next 链表

题目

自己一开始的思路是对链表的每个节点的val进行更改,然后就没有然后了……
没写出来

然后看了卡哥的讲解

感触最深的点是卡哥是让结点间的指向发生改变(换句话说,改变了节点的next),然后顺着这个思路卡哥给出了两个方法:双指针法和递归法。

img

特别要给卡哥的视频讲解点个大大的赞,所有的小细节都讲清楚了。

看了卡哥讲解后自己写的代码:

双指针法:

/**
 * 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 *cur = head, *pre = nullptr;
        while (cur)
        {
            ListNode *tmp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = tmp;
        }
        return pre;
    }
};

递归法:

/**
 * 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* reverse(ListNode *cur, ListNode *pre)
    {
        if (cur == nullptr)
            return pre;

        ListNode *tmp = cur->next;
        cur->next = pre;
        return reverse(tmp, cur);
    }


    ListNode* reverseList(ListNode* head) {
        return reverse(head, nullptr);
    }
};

特别要说明的是自己又踩了下坑,就是这段:

if (cur == nullptr)
    return pre;

刚开始又写成了

if (cur)
    return pre; 

于是报错……

写if语句的判断条件一定要小心!!!

标签:pre,ListNode,cur,val,206,反转,nullptr,next,链表
From: https://www.cnblogs.com/hisun9/p/18568548

相关文章

  • 数据结构第二章双链表的相关操作
    带头结点的双链表的实现以及一系列操作#include<stdio.h>#include<stdlib.h>//定义双链表节点结构体typedefstructDNode{intdata;structDNode*prior;structDNode*next;}DNode,*DLinkList;//初始化双链表voidInitList(DLinkList&L){......
  • LeetCode19 删除链表的倒数第 N 个结点
    LeetCode19删除链表的倒数第N个结点题目链接:LeetCode19描述给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]思路定义fast指针和slow指针,初始值为虚拟头结点fast首先走n+1步fast和slow同时移动,直......
  • 【剑指Offer刷题系列】两个单链表相交的起始节点
    问题描述给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。自定义评测:......
  • 单片机线反转法实现矩阵键盘
    矩阵键盘原理前文描述的独立按键需要每一个都需要占用一个引脚控制,如果按键数多了,控制将会变得麻烦,并且浪费资源为此,使用矩阵键盘,每个引脚不连接单独的按键,而是连接一行或一列按键,当按下一个按键时,确定行列相交的坐标即可确定被按下的按键,如下图(最下面一排是独立按键,而上面......
  • 707. 设计链表
    题目这题卡哥的讲解视频特别好,涵盖了很多细节。自己跟着卡哥代码敲了一遍。单链表:classMyLinkedList{public:structLinkedNode{intval;LinkedNode*next;LinkedNode(intval):val(val),next(nullptr){}};MyLinkedList()......
  • 2024/11/24 链表
    链表1.类型(1)单链表(2)双链表(3)循环链表2.链表在内存的存储方式数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。链表是通过指针域的指针链接在内存中各个节点。3.链表的定义定义......
  • 牛客面试必刷TOP101之链表专项
    个人主页:C++忠实粉丝欢迎点赞......
  • 《链表算法:浅谈并实现一下链表各种排序算法及其性能》
    前置知识数据结构-链表数组排序算法:选择排序[解法1],归并排序递归版[解法2],归并排序迭代法[解法3最优解][归并部分基础]合并两个有序链表如果您不满足于此,笔者也提供冒泡排序,插入排序,快速排序的链表写法。以及,我们会在下文讨论为什么不说明希尔排序,堆排序,因为两者不适合......
  • 数据结构-链表、栈、动态数组、队列
    数据结构文章目录数据结构不透明指针定义优点应用场景不透明指针的实现定义不透明指针类型链表知识点节点(Node)头节点(Head)尾节点(Tail)单向链表双链表动态数组队列队列的链式存储队列的顺序存储栈栈的顺序存储栈的链式存储不透明指针定义不透明指针是指指向一个......
  • 203. 移除链表元素
    题目很长时间没接触链表这种数据结构了,看到这道题有点无从下手。看了卡哥讲解视频特别想说的是,卡哥的视频把这个题讲的很好,有些不理解的地方,怎么思考的,卡哥讲的很清楚。跟着卡哥代码敲了一下:方法一:不设置虚拟头节点/***Definitionforsingly-linkedlist.*structLis......