链表|206.反转链表

力扣题目链接

cpp 复制代码
struct ListNode* reverseList(struct ListNode* head){
    //保存cur的下一个结点
    struct ListNode* temp;
    //pre指针指向前一个当前结点的前一个结点
    struct ListNode* pre = NULL;
    //用head代替cur,也可以再定义一个cur结点指向head。
    while(head) {
        //保存下一个结点的位置
        temp = head->next;
        //翻转操作
        head->next = pre;
        //更新结点
        pre = head;
        head = temp;
    }
    return pre;
}

其实这题思路走对了就一下子搞定了,不就是把箭头改一下嘛

可是自己写却有许多意想不到的问题,所以还是要自己动手敲代码哦!你以为懂了和你能够独立敲对代码是两件事!

一、出错点

1.pre没有指向NULL,突然想到了野指针这个知识点

2.关于链表知识里面指针的弯弯绕绕没有特别清楚

二、理解后的思路

首先定义一个temp指针,指向头结点,再定义一个pre指针,初始化为null。

然后就要开始反转了,首先要把 temp->next 节点用tmp指针保存一下,也就是保存一下这个节点。

为什么要保存一下这个节点呢,因为接下来要改变 tmp->next 的指向了,将tmp->next 指向pre ,此时已经反转了第一个节点了。

接下来,就是循环走如下代码逻辑了,继续移动pre和temp指针。

最后,temp 指针已经指向了null,循环结束,链表也反转完毕了。 此时我们return pre指针就可以了,pre指针就指向了新的头结点。

三、总结

链表的弯弯绕绕要很清楚啊!

在熟悉链表的基本操作之后,继续练习,这样就不会很吃力而且也能很好的巩固链表知识!

当然还是要多敲代码咯,一天只认真搞懂一题太少,要加量练习,一天搞懂两道新题吧~

相关推荐
星星火柴9363 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
艾莉丝努力练剑4 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
闪电麦坤955 小时前
数据结构:迭代方法(Iteration)实现树的遍历
数据结构·二叉树·
Cx330❀5 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
散1125 小时前
01数据结构-Prim算法
数据结构·算法·图论
阿巴~阿巴~6 小时前
深入解析C++ STL链表(List)模拟实现
开发语言·c++·链表·stl·list
..过云雨6 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
拂晓银砾6 小时前
Java数据结构-栈
java·数据结构
旺小仔.7 小时前
双指针和codetop复习
数据结构·c++·算法
楽码9 小时前
底层技术SwissTable的实现对比
数据结构·后端·算法