本人电子系,只为一学生。心喜计算机,小编以怡情。
给定一个链表,旋转链表,使得每个节点向右移动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了
}