码迷,mamicode.com
首页 > 其他好文 > 详细

第22题 Rotate List

时间:2014-10-12 13:33:18      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:style   color   io   os   ar   java   for   strong   sp   

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.

Solution:

/**
 * 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||head.next==null || n==0) return head;
        ListNode fakeHead = new ListNode(0);
        fakeHead.next=head;
        int length=0;
        ListNode start=fakeHead, end=fakeHead;
        for(int i=0; i<n; i++){
            if(end.next==null) break;
            end=end.next;
            length++;
        }
        if(end.next==null){
            //when n>=length
            //int startPos = (length-n)%length+length;      //Or:
            int startPos=n%length;
            if(startPos==0) return fakeHead.next;
            startPos=length-startPos;
            
            for(int i=0; i<startPos; i++){
                start=start.next;
            }
        }
        else{
            while(end.next!=null){
                start=start.next;
                end=end.next;
            }
        }
        //reorder list  
        end.next=fakeHead.next;
        fakeHead.next=start.next;
        start.next=null;
        return fakeHead.next;
        
        
    }
}
Note:如果end后移n次后end.next还不是null,说明list的长度>n。则将start和end整体后移。

否则,说明list的长度<=n,这时候需要找到rotate的实际次数。对于一个长为length的list,若rotate的次数为length,则结果为原list。所以rotate的实际次数是n%length,若结果为0,则直接返回原list;否则,需要找到相应的start点,即修改list的起始点。

注意代码中

 int startPos = (length-n)%length+length;      
其实和

int startPos=n%length;
startPos=length-startPos;
一个效果(startPos不为0时)。但是后者比较好理解。

另外一个负数对一个正数取模,计算如下:

 result=m%n, where m<=0, n>0

Assume m=xn+result, where x<=0, result<0 and -result<n.

比如(-5)%3。 -5=3*(-1)+(-2)。所以(-5)%3=-2。

第22题 Rotate List

标签:style   color   io   os   ar   java   for   strong   sp   

原文地址:http://blog.csdn.net/amberfeb/article/details/40015827

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!