LeetCode OJ Problem:Rotate List
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
.
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
if((!head) || (!head->next) || (k == 0))
return head;
ListNode *p, *q;
int m, n;
m = k;
n = 0;//如果k大于链表长度,则n值用来记录链表的长度
p = q = head;
while(m && p)
{
p = p->next;
m--;
n++;
}
/*k值大于链表长度,则取k对链表长度的余数进行循环*/
if(!p)
{
n = k % n;
if(n == 0)
return head;
p = head;
while(n)
{
p = p->next;
n--;
}
}
/*p先走k步,然后p、q同时走,直到p到达链表末尾,则q也刚好走k步*/
while(p->next)
{
q = q->next;
p = p->next;
}
p->next = head;
head = q->next;
q->next =NULL;
return head;
}
};