力扣题目链接
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指针就指向了新的头结点。
三、总结
链表的弯弯绕绕要很清楚啊!
在熟悉链表的基本操作之后,继续练习,这样就不会很吃力而且也能很好的巩固链表知识!
当然还是要多敲代码咯,一天只认真搞懂一题太少,要加量练习,一天搞懂两道新题吧~