一、题目信息
将一个链表各节点元素指向反转
题目链接:https://leetcode.com/problems/reverse-linked-list/
二、题目分析
由链表的特点可知,一个节点元素,可以获知当前元素和指向的下一个节点元素,但是不知道前一节点元素,所以需要一个前一节点元素指针,记录当前元素反转后指向的位置。反转前,当前元素指向的下一个元素指针需要临时记录存储,否则反转后会出现断链。
三、代码
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* pPre = nullptr;
ListNode* pCur = head;
while (pCur != nullptr)
{
ListNode* pNext = pCur->next; //反转前记录当前元素的下一个元素位置
pCur->next = pPre; //反转
pPre = pCur; //前一元素移位
pCur = pNext; //当前元素移位
}
return pPre;
}
};
四、总结
链表反转是通过靠 pre 和 cur 指针移动反转实现,需要注意反转前记录当前元素的下一个元素位置,防止断链,反转后,先给前一元素移位,再给当前元素移动,防止断链。注意赋值顺序。