LintCode 170-旋转链表

来源:互联网 发布:百度贴吧查ip软件 编辑:程序博客网 时间:2024/06/07 00:56

本人电子系,只为一学生。心喜计算机,小编以怡情。


给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数

样例
给出链表1->2->3->4->5->null和k=2
返回4->5->1->2->3->null


public ListNode rotateRight(ListNode head, int k) {            // write your code here        // 给出链表1->2->3->4->5->null和k=2        //       返回4->5->1->2->3->null        //先进行特殊值的判断        if(head==null) return null;        if(head.next==null) return head;         ListNode pre=head;         ListNode temp=head;         //接下来考虑给的数字大于链表的长度,因此要遍历一遍的到链表长度         int count=1;         while(pre.next!=null)         {             pre=pre.next;             count++;         }         k=k%count;         if(k==0)  return head;//[1,0] k=100%2==0,就直接返回就好         pre=head;//用完pre别忘指回来        // 给出链表1->2->3->4->5->null和k=2为例         while(k--!=0)         {             temp=temp.next;//循环两次,temp指向3         }         while(temp.next!=null)//然后pre与temp都往后移         {             pre=pre.next;             temp=temp.next;         }//移完后pre指向3,temp指向5         ListNode ret=pre.next;;//设定ret指向4,即旋转完的头指针         temp.next=head;//让5指向1         pre.next=null;//让3指向null         return ret;//这样就变成了4 5 1 2 3了        }
0 0
原创粉丝点击