6/02/2014

89. Reverse Linked List II

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        for (int i=0; i<n-m; i++) {
            int k1 = m+i;
            int k2 = n-i;
           
            if (k1>k2) return head;
           
            ListNode p = head;
            ListNode q = head;
           
            while (k1-1>0) {
                p = p.next;
                k1--;
            }
           
            while (k2-1>0) {
                q = q.next;
                k2--;
            }
           
            int temp = p.val;
            p.val = q.val;
            q.val = temp;
        }
       
        return head;
    }
}

1 条评论:

  1. e.g. 1-->2-->3-->4-->5-->6-->7-->8-->9-->null, m=2, n=9.
    1. 找到2和9,互换val。
    2. 找到3和8,互换val。
    3. 找到4和7,互换val。
    4. 找到5和6,互换val。

    回复删除