[Lintcode]Rotate List旋转链表

来源:互联网 发布:全国dna数据库比对 编辑:程序博客网 时间:2024/05/18 01:06

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

Example

Given 1->2->3->4->5 and k = 2, return 4->5->1->2->3.

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    /**     * @param head: the List     * @param k: rotate to the right k places     * @return: the list after rotation     */    public ListNode rotateRight(ListNode head, int k) {        if(head == null || k == 0) return head;                ListNode tmp = head;                int length = 1;        while(tmp.next != null) {            tmp = tmp.next;            length ++;        }                        k = k % length;        int diff = length - k;//注意k大于head长度的问题         if(diff == 0) return head;        tmp.next = head;        ListNode res = null;        while(diff > 1) {            head = head.next;            diff--;        }        res = head.next;        head.next = null;        return res;    }}



0 0
原创粉丝点击