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
.
pro:给一个链表,和一个k,要求将链表整体向右rotate k个位置,就是整体循环向右移动k个位置。也就是右边k个节点移到左边。
sol:
1.首先需要知道链表长度len。k有可能大于len,所以k=k%len。左边有left=len-k%len个节点,右边有k%len个节点。
2.第二步就是从head开始找到第left个位置。找到这两段的首末位置,将指针指一下就好。在原链表中两段表示为(head,cur),(cur->next,last)。
code:
class Solution {
public:
ListNode *rotateRight(ListNode *head,int k)
{
if(head==NULL) return head;
ListNode *cur,*last;
int i,length;
length=0;
cur = head;
while(cur!=NULL)
{
if(cur->next==NULL)
last = cur;
length++;
cur = cur->next;
}
if(k%length==0) return head;
k = length - k%length;
cur = head;
for(i=1;i<k;i++)
cur = cur->next;
last->next = head;
head = cur->next;
cur ->next = NULL;
return head;
}
};