首页 > 代码库 > Rotate List

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         13         int size = 0;14         ListNode *p = head;15         while(p != NULL)16         {17             size++;18             p = p->next;19         }20         21         if(size == 0 || size == 1)22             return head;23             24         k = k % size;25         for(int i = 0; i < k; i++)26         {27             ListNode *pretail = head;28             while(pretail->next->next != NULL)29                 pretail = pretail->next;30                 31             ListNode *tail = pretail->next;32             pretail->next = NULL;33             tail->next = head;34             head = tail;35         }36         37         return head;38     }39 };

 

Rotate List