题目:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:

输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
- 链表中节点的数目范围是
[0, 5000]
-5000 <= Node.val <= 5000
解答:
- 需要三个指针,pre,cur,temp。目的是pre指向NULL,cur指向头节点,temp临时存储cur的next。
- 每当cur指向pre完成两个节点之间的反转后,就需要pre指向cur的位置,cur指向temp的位置,temp在存储新的cur的next。
- 三个指针始终连续,直到cur为NULL时,代表没有要反转的节点了。
cpp
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* temp;//临时存储cur的next的
ListNode* pre = NULL;
ListNode* cur = head;
while(cur){//当cur指向空的时,已经反转完毕,不再进入循环
temp = cur->next;//当cur的next指向前一个节点完成反转时,cur的next找不到原来的下一个节点了,所以临时存储一下
//例如:1-》2-》3-》变成了 1《-2-》3 时1的next不在是2,而是NULL,所以temp临时存储一下,为了后续cur能移动下一个节点,继续反转
cur->next = pre;//反转
pre = cur;
cur = temp;
}
return pre;
}
};