首页 > 代码库 > Leetcode | Rotate List

Leetcode | 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.

先把链串起来,连成环。然后将head往后移动(len-k%len)次,再把链断开。整个思路也非常清晰。

 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) return head;13         int len = 1;14         ListNode *tail = head, *prev;15         while (tail->next) {16             len++;17             tail = tail->next;18         }19         tail->next = head;20         k = len - (k % len);21         for (int i = 0; i < k; i++) {22             prev = head;23             head = head->next;24         }25         prev->next = NULL;26         return head;27     }28 };

 

Leetcode | Rotate List