给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]
解析:头尾节点需要单独处理;中间部分循环即可。
1、头:指针p指向头,next指向nullptr;
2、中间:指针head指向头,指针p指向中间节点,指针t指向p的next,让p的next指向head,然后head、p往后挪一位;直到p的next为空,这时候t和p都在节点最后一位;
3、让p的next指向head。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head == nullptr || head->next==nullptr) return head;
ListNode* p,*t;
p=t=head;
t=p->next;
p->next=nullptr;
p=t;
while(p->next){
t=p->next;
p->next=head;
head=p;
p=t;
}
p->next=head;
return p;
}
};