1、题目描述
给一个单链表和整数k,旋转链表k位,返回新链表。
2、思路
也就是说,把链表的倒数k位,全都移动到链表头上来,
k可能会大于链表长度,所以实际移动步数是k%len。
Two Pointers。
一个指针f先走k步,之后指针p和f一起走,直到f走到最后一个节点。
此时p的位置是新链表的尾元素位置。
让f->next等于head,让 答案指向p->next,让p->next = NULL。
3、代码
ListNode* rotateRight(ListNode* head, int k) {
ListNode* f=head;
if(f==NULL)
return head;
int len=0;
while(f){
len++;
f=f->next;
}
k=k%len;
f=head;
for(int i=0;i<k;i++){
f=f->next;
}
ListNode* p=head;
while(f->next){
p=p->next;
f=f->next;
}
f->next = head;
head = p->next;
p->next=NULL;
return head;
}