1. 思想
- 用三个变量跟踪已经翻转、准备翻转和下一个结点
- 循环的开始,先记录下 cur 的下一个结点,然后再对 cur 翻转
2. 算法代码
/**
* @brief 翻转链表
* 关键变量
* (1)pre: 已经成功翻转的链表头结点
* (2)cur、next: 准备翻转的结点和下一个位置
*/
ListNode* reverseList(ListNode* head) {
if(!head)
return nullptr;
ListNode* pre = nullptr, *cur = head, *next = nullptr;
while(cur){
// 先记录下一个结点,再翻转
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
return pre;
}
- 注意:pre 记得先设为 nullptr