Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative.

For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode rotateRight(ListNode head, int n) {
        
        if (head == null) return head;
        int count = getTotalNumber(head);
        n = n % count;
        if (n == 0) return head;
        
        ListNode tail = getTail(head);
        
        int startingIndex = count - n;
        ListNode prev = head;
        while (startingIndex >= 2) {
            prev = prev.next;
            startingIndex--;
        }
        ListNode newHead = prev.next;
        prev.next = null;
        tail.next = head;
        return newHead;       
        
    }
    ListNode getTail(ListNode head) {
        while (head.next != null) {
            head = head.next;
        }
        return head;
    }
    
    
    int getTotalNumber(ListNode head) {
        int count = 0;
        while (head != null) {
            count++;
            head = head.next;
        }
        return count;
    }
}


你可能感兴趣的:(Rotate List)