Reverse a linked list from position m to n. Do it in one-pass.
Note: 1 ≤ m ≤ n ≤ length of list.node
Example:less
Input: 1->2->3->4->5->NULL, m = 2, n = 4 Output: 1->4->3->2->5->NULL
難度:mediumcode
題目:反轉從m到n的鏈表元素。一次遍歷。it
思路:記錄m及m以前的位置,而後使用頭插法。io
Runtime: 2 ms, faster than 97.09% of Java online submissions for Reverse Linked List II.
Memory Usage: 36.9 MB, less than 0.95% of Java online submissions for Reverse Linked List II.ast
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if (m == n) { return head; } ListNode dummyHead = new ListNode(0); dummyHead.next = head; ListNode ptr = head, prevMPtr = dummyHead, tailPtr = head; for (int i = 1; i <= n; i++) { ListNode node = ptr; ptr = ptr.next; if (i < m) { prevMPtr = node; } else if (i == m) { tailPtr = node; node.next = null; } else { node.next = prevMPtr.next; prevMPtr.next = node; } } tailPtr.next = ptr; return dummyHead.next; } }