Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given 1->2->3->4->5->NULL
, m = 2 and n = 4,
return 1->4->3->2->5->NULL
.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
package leetCode; /** * Created by lxw, liwei4939@126.com on 2018/3/13. */ public class L092_Reverse_Linked_List { public ListNode reverseList(ListNode head, int m, int n){ if (head == null){ return null; } ListNode dummy = new ListNode(0); dummy.next = head; ListNode pre = dummy; for (int i = 0; i < m-1; i++){ pre = pre.next; } ListNode start = pre.next; ListNode then = start.next; for (int i= 0; i < n-m; i++){ start.next = then.next; then.next = pre.next; pre.next = then; then = start.next; } return dummy.next; } public static void main(String[] args){ L092_Reverse_Linked_List tmp = new L092_Reverse_Linked_List(); ListNode head = new ListNode(1); head.next = new ListNode(2); head.next.next = new ListNode(3); ListNode tmpNode = new ListNode(4); head.next.next.next = tmpNode; tmpNode.next = new ListNode(5); tmpNode.next.next = null; ListNode res = tmp.reverseList(head, 2, 4); while (res != null){ System.out.print(res.val + "->"); res = res.next; } System.out.println("Null."); } }