【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 };