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.
题意描述很模糊,经过多次失败的尝试,总算明白大概是啥意思了……
|
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
42
43 |
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class
Solution {public: ListNode *rotateRight(ListNode *head, int
k) { if(head == NULL)return
NULL; k = k%listlength(head); if(k == 0||k>=listlength(head))return
head; ListNode *s1 = head,*s2 = head,*temp = head; for(int
i = 0 ; i < k-1;i++) { if(s1->next == NULL)return
head; s1 = s1 -> next; } while(s1 -> next != NULL) { s1 = s1 -> next; temp = s2; s2 = s2 -> next; } s1->next =head; head = s2; temp->next = NULL; return
head; } int
listlength(ListNode *head) { int
i = 0; ListNode *temp = head; while(temp !=NULL) { i++; temp = temp ->next; } return
i; }}; |
原文:http://www.cnblogs.com/pengyu2003/p/3595664.html