【链表】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 };

 

posted @ 2020-05-01 22:31  梦醒潇湘  阅读(120)  评论(0)    收藏  举报