206. 反转链表
基本思路
反转链表,仅仅需要扭转链表的指向顺序即可,如果用双指针实现的话,一个快指针,一个慢指针指向相邻的两个结点,并将结点的指向顺序改变即可。
思考一些细节问题,在扭转之前,我们需要一个空指针作为扭转后的尾部。
好,看代码
ListNode* reverseList(ListNode* head) {
ListNode* p0 = nullptr;
ListNode* p1 = head;
while(p1 != nullptr){
ListNode* p2 = p1->next;
p1->next = p0;
p0 = p1;
p1 = p2;
}
return p0;
}
有几个点需要注意:
p0 作为 左指针, p1作为右指针
line6 首先要记录下p1的下一个指针,因为反转之后就变了
line8 一定要在line9之前
完整代码
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* p0 = nullptr;
ListNode* p1 = head;
while(p1 != nullptr){
ListNode* p2 = p1->next;
p1->next = p0;
p0 = p1;
p1 = p2;
}
return p0;
}
};