测评
题目
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
代码
struct ListNode* reverseBetween(struct ListNode* head, int m, int n){
if (m == n) return head;
struct ListNode *ret = (struct ListNode *)malloc(sizeof(struct ListNode));
ret->next = head;
struct ListNode *pre = ret, *p, *q, *last;
int count = 1;
while (count < m) {
pre = pre->next;
count++;
}
p = pre->next;
last = p;
pre->next = NULL;
while (count <= n) {
q = p->next;
p->next = pre->next;
pre->next = p;
p = q;
count++;
}
last->next = p;
return ret->next;
}