剑指 Offer 24. 反转链表
难度简单
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
思路:
(1)在反转过程中会修改指向下一节点指针,导致丢失下一节点的信息,所以要提供一个额外指针提前保存下一节点的信息。
(2)在反转过程中需要指向自己的上一节点,所以要提供一个额外指针提前保存上一节点的信息。
代码:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (head == NULL) return NULL;
ListNode* pReverseHead = head;
ListNode* pCur = head;
ListNode* pPre = NULL;
while (pCur != NULL) {
ListNode* pNext = pCur->next;
if (pNext == NULL) {
pReverseHead = pCur;
}
pCur->next = pPre;
pPre = pCur;
pCur = pNext;
}
return pReverseHead;
}
};