题目描述
92. Reverse Linked List II 是第206题的进阶版206. Reverse Linked List
思路很简单,但一次性通过还是有点难度的。
/**
* 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* reverseBetween(ListNode* head, int left, int right) {
if(left == right)
return head;
ListNode* firstTail = nullptr;
ListNode* leftHead = head;
for(int i = 1;i < left;i++){
firstTail = leftHead;
leftHead = leftHead->next;
}
int count = right - left;
ListNode* pre = leftHead;
ListNode* cur = leftHead->next;
ListNode* temp = nullptr;
while(count--){
temp = cur->next;
cur->next=pre;
pre = cur;
cur = temp;
}
leftHead->next = temp;
if(head == leftHead){
head = pre;
}else{
firstTail->next = pre;
}
return head;
}
};