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.
将链表m-n之间的节点反转。
而且已经规定了 1 ≤ m ≤ n ≤ length of list 。 所以也没什么难点。
当然代码还可以化简。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if( head == null || head.next == null || m==n) return head; ListNode bef = head; for( int i = 2;i<m;i++) bef = bef.next; ListNode start = null; if( m < 2){ bef = null; start = head; }else start = bef.next; ListNode SS = start; ListNode flag = null; ListNode next = start.next; for( int i = 0;i<n-m;i++){ next = start.next; start.next = flag; flag = start; start = next; } ListNode end = start.next; start.next = flag; if( end == null && bef == null) return start; else if( end == null){ bef.next = start; return head; }else if( bef == null){ SS.next = end; return start; }else { bef.next = start; SS.next = end; return head; } } }