【
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
】
双指针处理链表问题。
struct ListNode* reverseBetween(struct ListNode* head, int m, int n){
struct ListNode* pre = NULL;
struct ListNode* one = head;
struct ListNode* two;
struct ListNode* curp;
struct ListNode* next;
int i;
int j;
int num = n - m + 1;
if (m == n) return head;
for(i = 1; i < m; i++) {
pre = one;
one = one->next;
}
two = one;
while(num > 0) {
next = one->next;
one->next = curp;
curp = one;
one = next;
num--;
printf("curp->val=%d,num=%d\n",curp->val, num);
}
two->next = one;
if(pre != NULL) {
pre->next = curp;
return head;
} else {
return curp;
}
}