两个边界条件没考虑到,少数次过
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 }