LeetCode: Rotate List

两个边界条件没考虑到,少数次过

 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         // Start typing your C/C++ solution below

13         // DO NOT write int main() function

14         ListNode *tmp = head;

15         if (!head) return NULL;

16         int n = 0;

17         while (tmp) {

18             n++;

19             tmp = tmp->next;

20         }

21         k %= n;

22         ListNode *p = head;

23         tmp = head;

24         for (int i = 0; i < n-k-1; i++) tmp = tmp->next;

25         ListNode *q = tmp->next;

26         if (!q) return head;

27         head = q;

28         tmp->next = NULL;

29         while (q->next) q = q->next;

30         q->next = p;

31         return head;

32     }

33 };

 C#

 1 /**

 2  * Definition for singly-linked list.

 3  * public class ListNode {

 4  *     public int val;

 5  *     public ListNode next;

 6  *     public ListNode(int x) { val = x; }

 7  * }

 8  */

 9 public class Solution {

10     public ListNode RotateRight(ListNode head, int k) {

11         ListNode tmp = head;

12         if (head == null) return null;

13         int n = 0;

14         while (tmp != null) {

15             n++;

16             tmp = tmp.next;

17         }

18         k %= n;

19         ListNode p = head;

20         tmp = head;

21         for (int i = 0; i < n-k-1; i++) tmp = tmp.next;

22         ListNode q = tmp.next;

23         if (q == null) return head;

24         head = q;

25         tmp.next = null;

26         while (q.next != null) q = q.next;

27         q.next = p;

28         return head;

29     }

30 }
View Code

 

你可能感兴趣的:(LeetCode)