【链表】92. 反转链表 II
题目:
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
解答:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* reverseBetween(ListNode* head, int m, int n) 12 { 13 ListNode dummy(0); 14 dummy.next = head; 15 16 ListNode *preM, *pre = &dummy; 17 //preM 18 // pre head 19 //1->2->3->4->5->NULL 20 //1->4->3->2->5->NULL 21 for (int i = 1; i <= n; ++i) 22 { 23 if (i == m) 24 { 25 preM = pre; 26 } 27 28 if (i > m && i <= n) 29 { 30 pre->next = head->next; 31 head->next = preM->next; 32 preM->next = head; 33 head = pre; // head has been moved, so pre becomes current 34 } 35 36 pre = head; 37 head = head->next; 38 } 39 40 return dummy.next; 41 } 42 };