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
.
AC代码如下:
ListNode* rotateRight(ListNode* head, int k)
{
if(head == NULL)
return head;
int length = 0;
ListNode *p = head;
while(p != NULL)
{
length++;
p=p->next;
}
k = k%length;
if( length == 1 || k == 0)
return head;
ListNode *q = head;
for(int i = 1;i < length - k;i++)
q = q->next;
ListNode *r = q->next;
ListNode *newHead = q->next;
while(r->next != NULL)
r = r->next;
r->next = head;
q ->next = NULL;
return newHead;
}
几个要注意的小问题,
1.函数中传入的节点head就是第一个节点,而不是我们常说的含头结点的单链表的头结点。
2.K值的问题,K如果大于单链表的长度,则取其对单链表长度取余后的结果。