题目:reverseBetween
要求:
翻转链表中第m个节点到第n个节点的部分
样例:
给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null
算法要求:
在原地一次翻转完成
解题思路:
在35题的基础上进行变型即可
算法如下:
ListNode *reverseBetween(ListNode *head, int m, int n) {
// write your code here
if (head == NULL) {
return NULL;
}
int i = 1;
ListNode *t = NULL, *p = head, *q = head->next, *end = head, *start = t;
while (i < m) {
t = p;
p = q;
q = p->next;
end = p;
start = t;
i++;
}
while (q != NULL && i < n) {
p->next = t;
t = p;
p = q;
q = p->next;
i++;
}
p->next = t;
end->next = q;
if (start != NULL) {
start->next = p;
} else {
return p;
}
return head;
}