[Leetcode] Distinct Subsequences

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.

K可能会大于链表的长度,坑爹!

 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 NULL;

13         ListNode *tail = head, *kth = head;

14         int n = 0;

15         while (tail != NULL) {

16             ++n;

17             tail = tail->next;

18         }

19         tail = head;

20         k %= n;

21         for (int i = 0; i < k; ++i) {

22             tail = tail->next;

23         }

24         while (tail != NULL && tail->next != NULL) {

25             tail = tail->next;

26             kth = kth->next;

27         }

28         if (tail != NULL) {

29             tail->next = head;

30             head = kth->next;

31             kth->next = NULL;

32         }

33         return head;

34     }

35 };

 

你可能感兴趣的:(LeetCode)