纯净版(c++):
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* pre = nullptr;
ListNode* cur = head;
while (cur != nullptr) {
ListNode* n = cur->next;
cur->next = pre;
pre = cur;
cur = n;
}
return pre;
}
};
本题思路可用于92. 反转链表 II
个人注解:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
//在从前向后遍历的过程中改变链表方向,如1->2->null变为null<-1<-2
//pre为当前cur反转后要指向的对象,以1->2->null的顺序来看,2反转后要指向1,而1在2前面,所以命名为pre
//cur从第一个节点开始,而第一个节点反转后要指向空,所以pre最开始为nullptr
ListNode* pre = nullptr;
ListNode* cur = head;
while (cur != nullptr) {
ListNode* n = cur->next;//记录当前节点的下一个节点,为后续做准备
cur->next = pre;//让cur指向pre,更改cur的指向,即反转
//将pre和cur向后移动
pre = cur;
cur = n;
//当处理完最后一个数据后移时,cur将变为nullptr,从而结束循环,pre为原链表的最后一个值,新链表的第一个值
}
return pre;
}
};