LeetCode 92. 反转链表 II新手理解,欢迎指正
原题链接
中等
作者:
YT.Liu
,
2021-03-19 11:02:11
,
所有人可见
,
阅读 426
小结
链表有一个关键思想在于,写题目时用到的都是*指针,也就是说,链表反转了,但是指针指向的那个结点还是那个结点,不会因为链表的反转而导致指针指向发生变化,例如题中的rightNode,反转后还是rightNode,只是他的next发生变化了,因此可以直接用pre -> next = rightNode来进行链表的连接,希望有同样思想误区的同学引以为戒。
C++ 代码
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
ListNode *reverseBetween(ListNode *head, int left, int right) {
ListNode *dump = new ListNode(-1);
dump -> next = head;
ListNode *cur = dump;
while (-- left) cur = cur -> next;
ListNode *pre = cur;
ListNode *leftNode = pre -> next;
cur = head;
while (-- right)cur = cur -> next;
ListNode *suc = cur -> next;
ListNode *rightNode = cur;
rightNode -> next = nullptr;
pre -> next = nullptr;
reverseList(leftNode);
pre -> next = rightNode;
leftNode -> next = suc;
return dump -> next;
}
ListNode *reverseList(ListNode *head){
if(! head || ! head ->next) return head;
ListNode *tail = reverseList(head -> next);
head -> next -> next = head;
head -> next = nullptr;
return tail;
}
};