码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 92. Reverse Linked List II

时间:2020-05-01 10:28:20      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:一个   ram   var   leetcode   部分   链表   javascrip   参考   div   

反转链表二。也是不会做,会写homebrew也枉然的题目,但是非常容易错。题意是给一个链表和两个数字m和n,请反转m和n之间的node,只能走一次。例子,

Example:

Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL

这题我借助了一个图,非得看着图做才行。

/*
 1       ->     2    ->    3     ->  4  ->  5
guard          p          next
*/

思路是头插法。我参考了一个很好的图示。照着例子跑一下吧。假设需要反转的部分是从2到4,反转的顺序是先把3拿出来插入1和2中间,然后再把4插入1和3中间,像这样。guard永远是需要反转的部分之前的一个节点,像个守卫一样不能动p是需要反转的部分的第一个节点。

1  ->  2  ->  3  ->  4  ->  5

1  ->  3  ->  2  ->  4  ->  5

1  ->  4  ->  3  ->  2  ->  5

时间O(n)

空间O(1)

JavaScript实现

 1 /**
 2  * @param {ListNode} head
 3  * @param {number} m
 4  * @param {number} n
 5  * @return {ListNode}
 6  */
 7 var reverseBetween = function(head, m, n) {
 8     let dummy = new ListNode(0);
 9     dummy.next = head;
10     let pre = dummy;
11     let cur = dummy.next;
12     for (let i = 1; i < m; i++) {
13         cur = cur.next;
14         pre = pre.next;
15     }
16     for (let i = 0; i < n - m; i++) {
17         let temp = cur.next;
18         cur.next = temp.next;
19         temp.next = pre.next;
20         pre.next = temp;
21     }
22     return dummy.next;
23 };

 

Java实现

 1 class Solution {
 2     public ListNode reverseBetween(ListNode head, int m, int n) {
 3         ListNode dummy = new ListNode(0);
 4         dummy.next = head;
 5         ListNode guard = dummy;
 6         ListNode p = dummy.next;
 7 
 8         // move p to m
 9         int step = 0;
10         while (step < m - 1) {
11             guard = guard.next;
12             p = p.next;
13             step++;
14         }
15 
16         for (int i = 0; i < n - m; i++) {
17             ListNode removed = p.next;
18             p.next = p.next.next;
19             removed.next = guard.next;
20             guard.next = removed;
21         }
22         return dummy.next;
23     }
24 }

 

[LeetCode] 92. Reverse Linked List II

标签:一个   ram   var   leetcode   部分   链表   javascrip   参考   div   

原文地址:https://www.cnblogs.com/aaronliu1991/p/11802898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!