一、问题描述
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 % size == 0 || size == 1
时不翻转链表。
三、代码
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if( k == 0)
return head;
int size = 0;
ListNode* p = head;
ListNode* q = head;
while(p){
++size;
p = p -> next;
}
if(size == 0)
return NULL;
if(k % size == 0 || size == 1)
return head;
p = head;
int k1 = k % size;
int end = size - k1;
while(--end)
p = p -> next;
q = p -> next;
p -> next = NULL;
p = q;
while(--k1)
p = p -> next;
p -> next = head;
return q;
}
};