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