Difficulty:: Medium
Reverse a linked list from position m to n. Do it in one-pass.
**Note: **1 ≤ m ≤ n ≤ length of list.
Example:
1 2 3
| Input: 1->2->3->4->5->NULL, m = 2, n = 4 Output: 1->4->3->2->5->NULL
|
Solution
Language: Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if (head == null || m <= 0 || n <= 0 || m >= n) { return head; } ListNode dummy = new ListNode(0); dummy.next = head; ListNode prev = dummy; ListNode cur = head; for (int i = 0; i < m - 1; i++) { prev = cur; cur = cur.next; } ListNode start = prev; ListNode end = cur; for (int i = 0; i < (n - m + 1); i++) { ListNode next = cur.next; cur.next = prev; prev = cur; cur = next; } start.next = prev; end.next = cur; return dummy.next; } }
|