LC206_反转链表 王道考研2.2.3综合题02
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
#include<iostream>
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 = NULL;
ListNode *next = NULL;
while(head != NULL){
// 用next 抓一下head后面的环境
next = head->next;
// pre变成head->next的指向,把head->next指针全部往前指
// 到最后 pre来到最后一个head上
head->next = pre;
pre = head;
head = next;
}
return pre;
}
};
学习体会:pre设置从NULL开始,依次到达每个链表(head之前,head之大到NULL时结束),使用head->next = pre实现链表反转,pre = head 抓住本次处理的链表,为下次翻转链表提供上次的链表指针(可以看到,在遍历整个链表的时候,中间的都是断开状态)