画画图就出来了
- 找到head,新建nullptr,找到next
- cur->pre,pre放到head,cur放到next,next下一个
代码
错误示范
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode * pre = nullptr;
ListNode * cur = head;
ListNode * nex = cur->next;
while(nex){
cur->next = pre;
pre = cur;
cur = nex;
nex = nex->next;
}
return cur;
}
};
总结:
- 注意最后一个点,cur反转之后,应该是返回pre
- 注意head == nullptr情况
正确代码
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head == nullptr) return nullptr;
ListNode* prev = nullptr;
ListNode* curr = head;
ListNode* nextTemp = curr->next;
while (nextTemp) {
curr->next = prev;
prev = curr;
curr = nextTemp;
nextTemp = curr->next;
}
curr->next = prev;
prev = curr;
return prev;
}
};
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr) {
ListNode* nextTemp = curr->next; // 保存下一个节点
curr->next = prev; // 反转当前节点
prev = curr; // 更新 prev
curr = nextTemp; // 更新 curr
}
return prev; // 最后 prev 是新的头节点
}
};