struct ListNode* reverseList(struct ListNode* head){
struct ListNode* prev = NULL;
struct ListNode* curr = head; while (curr != NULL) {
struct ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
} return prev;
} 为什么struct ListNode* prev = NULL;?
这里存在一个理解上的错误:首先 反转链表最终是要如图呈现的 :
我的理解是 struct ListNode* prev = NULL等于新开了一个空链表 然后改变指针方向
总结思路:反转链表有两种思路 一种是构造虚拟结点,一种则是直接反转
构造虚拟节点的方法是创造一个ans 然后让原有的链表接入上去的一种做法
核心就是链表的插入
注意:需要新建一个next结点用来储存cur->next 然后在一轮遍历后 通过cur=next重新遍历。
第二次复盘总结:
首先需要重申
ans->next= cur->next
前面一个ans的next是指的指向指针 后面的一个next则是数据域
第二:图中的cur就是cur