1 public class Solution { 2 public ListNode reverseBetween(ListNode head, int m, int n) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 ListNode newhead = new ListNode(0); 6 7 newhead.next = head; 8 9 ListNode runner = newhead; 10 for(int i = 0; i < m-1; i++) 11 { 12 runner = runner.next; 13 } 14 ListNode premindex = runner; 15 ListNode mindex = runner.next; 16 17 ListNode pre = mindex; 18 runner = mindex.next; 19 20 for(int i = 0; i < n - m; i++) 21 { 22 ListNode tmp = runner.next; 23 runner.next = pre; 24 pre = runner; 25 runner = tmp; 26 } 27 premindex.next = pre; 28 mindex.next = runner; 29 return newhead.next; 30 } 31 }