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)