【Leetcode】反转链表 II

题目链接:反转链表 II


题意:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

输入: 1->2->3->4->5->NULL, m = 2, n = 4

输出: 1->4->3->2->5->NULL


题解:感觉就是k个一组反转链表改了下。。还简单些了。先走m个,然后从m到n反转。可以查看链接。

代码:

 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* ans = new ListNode(0);
14         ListNode* pre = ans;
15         ListNode* cur = head;
16         ListNode* tail = ans;
17         ans->next = head;
18 
19         for(int i = 1; i < m;i++){
20             head = head->next;
21             pre = cur;
22             cur = head;
23         }
24 
25         for(int i = m;i < n;i++){
26             tail = cur->next;
27 
28             cur->next = tail->next;
29             tail->next = pre->next;
30             pre->next = tail;
31         }
32 
33         return ans->next;
34 
35     }
36 };

猜你喜欢

转载自www.cnblogs.com/Asumi/p/12514638.html