學渣帶你刷Leetcode0061旋轉鏈表

題目描述

給定一個鏈表,旋轉鏈表,將鏈表每個節點向右移動 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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章