leetcode 206. 反转链表
小于 1 分钟
**题目描述:**给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
方法一:虚拟头结点+头插法
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head == nullptr) {
return nullptr;
}
ListNode* dummyHead = new ListNode(-1, head);
ListNode* p1 = dummyHead;
while( p1 && p1->next) { //头插
ListNode* temp = p1->next;
p1->next = dummyHead->next;
dummyHead->next = p1;
p1 = temp;
}
if(p1 != nullptr) {//最后一个结点
p1->next = dummyHead->next;
}
head->next = nullptr;
return p1;
}
};
**方法二:**类似 int temp = a; a =b; b =temp;
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* p1 = head;
ListNode* p2 = nullptr; //记录反转后链表的头结点
ListNode* temp = nullptr; //暂存p1的下一个结点的位置
while(p1) {
temp = p1->next;
p1->next = p2; //翻转
p2 = p1;
p1 = temp;
}
return p2;
}
};