leetcode_92
Reverse a linked list from position m to n. Do it in one-pass.
Note:
Example:
Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULLSolutions
typedef struct ListNode node;
struct ListNode* reverseBetween(struct ListNode* head, int m, int n){
node * next, * nnext, * hhead = head, ** pprev = &hhead;
n = n - m; m -= 1;
while (m--) pprev = &((*pprev)->next);
head = *pprev; next = head->next;
// reverse link one by one
while (n--) {
nnext = next->next;
next->next = head;
head = next;
next = nnext;
}
// relink
(*pprev)->next = next;
*pprev = head;
return hhead;
}Last updated