題目描述
給定一個鏈表,旋轉鏈表,將鏈表每個節點向右移動 k 個位置,其中 k 是非負數。
示例 1:
輸入: 1->2->3->4->5->NULL, k = 2
輸出: 4->5->1->2->3->NULL
解釋:
向右旋轉 1 步: 5->1->2->3->4->NULL
向右旋轉 2 步: 4->5->1->2->3->NULL
示例 2:
輸入: 0->1->2->NULL, k = 4
輸出: 2->0->1->NULL
解釋:
向右旋轉 1 步: 2->0->1->NULL
向右旋轉 2 步: 1->2->0->NULL
向右旋轉 3 步: 0->1->2->NULL
向右旋轉 4 步: 2->0->1->NULL
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/rotate-list
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
白話題目:
算法:
詳細解釋關注 B站 【C語言全代碼】學渣帶你刷Leetcode 不走丟 https://www.bilibili.com/video/BV1C7411y7gB
C語言完全代碼
struct ListNode* rotateRight(struct ListNode* head, int k) {
if (k <= 0 || head == NULL) return head;
int n = 1;
struct ListNode* p = head;
while (p->next != NULL) { // 求長度
p = p->next;
n++;
}
if (n == k || n == 1) // 求位置
return head;
else if (k > n)
k = n - (k % n) - 1;
else
k = n - k - 1;
p->next = head; // 鏈表成環
p = head; // 重新搜索
while (k > 0) {
p = p->next;
k--;
}
head = p->next; // 鏈表解環
p->next = NULL;
return head;
}