Rotate List (Medium)

Description

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.

Analysis

简单题

My Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/

class Solution {
int getlength(ListNode *head){
int len = 0;
while(head){
len++;
head = head->next;
}
return len;
}
public:
ListNode *rotateRight(ListNode *head, int k) {
if(head==NULL) return NULL;
ListNode *p = head,*q,*ans;
int len = getlength(p) , num = 0;
k = k%len;
if(k==0) return head;
p = head;
while(p){
num++;
if(num+k==len)
break;
p = p->next;
}
ans = q = p->next;
p->next = NULL;
while(q->next)
q = q->next;
q->next = head;

return ans;
}
};