题目:
给你单链表的头节点 head,请你反转链表,并返回反转后的链表。
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
解题思路:
我们要反转链表,由于是单链表,所以要在之前存储其前一个节点,所以我们用双指针的做法,用两个指针p和pre,p指向head,pre指向p的前一个节点,在遍历链表的过程中,由于我们要改变p->nexts使其指向的是其前一个节点,所以在遍历链表的过程中,我们需要新建一个节点next来记录p->next,然后改变p->next=pre,再让p和pre后移。
示例:输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
红色表示p节点指向,蓝色表示pre指向,圈起来是新建next节点存储原链表中p的下一个节点
代码
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *p=head;
ListNode *pre=nullptr;
while(p){
ListNode *next=p->next;//用来记录p的后一个节点,不然改变p->next后就会找不到p后面的节点
p->next=pre;//改变链表方向
pre=p;//pre随p后移
p=next;//继续遍历原链表
}
return pre;
}
};