61.旋转链表
关键词: 双指针 循环链表
先将链表连接成环形成循环链表,然后同时移动原来的链表头,尾指针同时移动(n-k)次,最后在尾指针处断开即可,此时的头指针指向新的链表头结点。
最后附上C++代码:
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(!head)
return NULL;
ListNode* i =NULL;
int size = 1;
for(i = head; i->next!=NULL; i = i->next ){
size++;
}
ListNode* end = i;
end->next = head;
k = k%size;
k = size - k;
while(k--){
head = head->next;
end = end->next;
}
end->next=NULL;
return head;
}
};