92. Reverse Linked List II
Reverse a linked list from position m to n. Do it in one-pass.
Note: 1 ≤ m ≤ n ≤ length of list.
Example:
Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL
题目链接:https://leetcode.com/problems/reverse-linked-list-ii/
思路
只是在反转链表的基础上,多了一些判断。
注意把反转后子链重新插入大链时的特殊情况:是否替换head了。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(m>=n || head==NULL || head->next==NULL) return head;
ListNode* pre=NULL, *next = head, *cur = head, * begin=NULL, *end=NULL, *begin_pre=NULL;
int idx = 1;
while(cur!=NULL && idx<=n){
next=cur->next;
if(idx==m){
begin = cur;
begin_pre = pre;
}
if(idx==n) end=cur;
if(idx>m){
cur->next = pre;
}
pre=cur;
cur=next;
++idx;
}
if(m>1) begin_pre->next = end;
else head = end;
begin->next = cur;
return head;
}
};