leetcode: Rotate List

来源:互联网 发布:maxwell软件原理 编辑:程序博客网 时间:2024/05/01 14:45

将链表向右移动n个单位。   由于链表向右移动我们每次都要确定新的链表尾部以便下次移动,但是链表尾部是上个尾部的前一节点,在单向的链表中我们只有遍历链表才能获得。这样直接按照题意来做的话循环内每次还要遍历一遍链表,代价是O(n*n),不太合理。


实际上,我们发现如果链表长l,那么向右移动l次链表无变化。如果n<l,那么向右移动n次相当于向左移动l-n次。  而向左移动我们每次需要确定新的头指针,这个指针可以直接利用上个头指针的next来直接获取,比较方便。   因而我们可以吧这道题变成向左移动来做。 


/** * 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) {        ListNode st=head;        int len=1;        if( head==null || n==0 || head.next==null)        {            return head;        }        while( st.next!=null )        {            len++;            st=st.next;        }        int l=len;        while( l<n )        {            l+=len;        }        ListNode tail=st;        st = head;        for( int i=0;i<l-n;i++ )        {            ListNode tmp=st.next;            st.next=null;            tail.next=st;            tail=st;            st=tmp;        }        return st;    }}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 中学生沉迷手机游戏怎么办? 孩子花钱玩游戏怎么办 mykung充不了电怎么办 脑出血恢复期身体软怎么办 腿里面有积水怎么办 手臂伤筋了怎么办 想打羽毛球没人怎么办 对看书没有兴趣怎么办 痴呆老人晚上闹怎么办 高中毕业证没拿怎么办 高考志愿同分怎么办 儿童吃虾过敏怎么办 滑板湿水了怎么办 老员工不听指挥怎么办 手机显示连接itunes怎么办 苹果手机下载不信任怎么办 暗影格斗3进不去怎么办 喝酒第二天头痛怎么办 加油忘记拔枪怎么办 刷机完成后怎么办 苹果8按键音太小怎么办 电脑蓝屏出英文怎么办 win10蓝屏重启怎么办 苹果手机变蓝屏怎么办 nga账号声望不足怎么办 鬃狮蜥胆小咬人怎么办 小狗拉稀脱水了怎么办 泰迪刚到家老叫怎么办 开车遇到拉死人怎么办 斯诺克解不到球怎么办 颈椎和腰椎不好怎么办 车祸肇事者不赔偿怎么办 交强险自赔吃亏怎么办 交通事故保险不结案怎么办 马蚁借呗超出一天还款怎么办 千里追风油太辣怎么办 蛀牙牙肉肿痛怎么办 转转删除的东西怎么办 专票开给了个人怎么办 手机用户密码忘了怎么办 手机用户密码忘记了怎么办