Given a linked list, rotate the list to the right by k places, where k is non-negative.
Example 1:
Input: 1->2->3->4->5->NULL, k = 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL
Example 2:
Input: 0->1->2->NULL, k = 4 Output:2->0->1->NULL
Explanation: rotate 1 steps to the right: 2->0->1->NULL rotate 2 steps to the right: 1->2->0->NULL rotate 3 steps to the right:0->1->2->NULL
rotate 4 steps to the right:2->0->1->NULL
题意
把链表循环右移k个
题解
1 class Solution { 2 public: 3 ListNode* rotateRight(ListNode* head, int k) { 4 if (head == NULL)return NULL; 5 ListNode*pre, *p = head; 6 int cnt = 0; 7 while (p != NULL) { 8 p = p->next; 9 cnt++; 10 } 11 k %= cnt; 12 if (k == 0)return head; 13 p = head; 14 while (k--) 15 p = p->next; 16 pre = head; 17 while (p->next != NULL) { 18 p = p->next; 19 pre = pre->next; 20 } 21 ListNode*ans = pre->next; 22 pre->next = NULL; 23 p->next = head; 24 return ans; 25 } 26 };
考虑空链和不移动的特殊情况
原文地址:https://www.cnblogs.com/yalphait/p/10357610.html
时间: 2024-11-05 22:03:32