题目
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
.
将链右旋k个数,
注意点:
1、k可以是0
2、链长可以是0(空链)
3、k可以大于链的长度,这样将是循环右移
代码:
/*******************************************************************
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
*******************************************************************/
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
if(k==0||head==NULL) //空链或者右移0次
return head;
ListNode *back=head,*new_head=head,*new_back=head; //链尾,新的头,新的尾
int len=1; //链长度
while(new_head->next!=NULL) //由链长计算有效右移位数
{
len++;
new_head=new_head->next;
}
k%=len;
if(k==0)
return head;
for(int i=0;i<k;i++) //获取新的头尾位置
back=back->next;
while(back->next!=NULL)
{
back=back->next;
new_back=new_back->next;
}
new_head=new_back->next; //修改链
back->next=head;
new_back->next=NULL;
return new_head;
}
};