求:spa
給定一個鏈表,旋轉鏈表,將鏈表每一個節點向右移動 k 個位置,其中 k 是非負數。code
示例 1:it
輸入: 1->2->3->4->5->NULL, k = 2
輸出: 4->5->1->2->3->NULL
解釋:
向右旋轉 1 步: 5->1->2->3->4->NULL
向右旋轉 2 步: 4->5->1->2->3->NULL
示例 2:io
輸入: 0->1->2->NULL, k = 4
輸出:
解釋:
向右旋轉 1 步: 2->0->1->NULL
向右旋轉 2 步: 1->2->0->NULL
向右旋轉 3 步:
向右旋轉 4 步: 2->0->1->NULL0->1->2->NULL2->0->1->NULL
解:List
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct
ListNode* rotateRight(
struct
ListNode* head,
int
k){
int
size=
0
;
int
i;
struct
ListNode* p1;
struct
ListNode* p2;
for
(p1=head;p1!=NULL;p1=p1->next)
size++;
if
(size==
0
)
return
head;
int
times = k % size;
struct
ListNode* pre = (
struct
ListNode*)malloc(
sizeof
(
struct
ListNode));
for
(i=
0
,p2=head;i<times;i++)
p2=p2->next;
for
(p1=head;p2->next!=NULL;p2=p2->next)
p1=p1->next;
p2->next = head;
pre->next = p1->next;
p1->next = NULL;
return
pre->next;
}