【leetcode】61. Rotate List

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  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* rotateRight(ListNode* head, int k) {
12         if(head==NULL||head->next==NULL||k==0)
13             return head;
14         ListNode* bf=head;
15         ListNode* newhead=head,*end=head;
16         int length=1;
17         while(end->next!=NULL){
18             end=end->next;
19             length++;
20         }
21         end=head;
22         if(k>length){
23             k=k%length;
24         }
25         if(k==length||k==0)
26             return head;
27         k--;
28         while(k>0&&end->next!=NULL){
29             end=end->next;
30             k--;
31         }
32         while(end->next!=NULL){
33             end=end->next;
34             bf=newhead;
35             newhead=newhead->next;
36         }
37 
38         bf->next=NULL;
39         end->next=head;
40         return newhead;
41 
42     }
43 };

 

posted @ 2016-07-17 14:58  0giant  阅读(181)  评论(0编辑  收藏  举报