91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++怎么旋轉鏈表

發布時間:2022-03-28 10:56:16 來源:億速云 閱讀:131 作者:iii 欄目:大數據

這篇文章主要介紹“C++怎么旋轉鏈表”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C++怎么旋轉鏈表”文章能幫助大家解決問題。

Rotate List 旋轉鏈表

Given the head of a linked list, rotate the list to the right by k places.

Example 1:

C++怎么旋轉鏈表

Input: head = [1,2,3,4,5], k = 2
Output: [4,5,1,2,3]

Example 2:

C++怎么旋轉鏈表

Input: head = [0,1,2], k = 4
Output: [2,0,1]

Constraints:

  • The number of nodes in the list is in the range [0, 500].

  • -100 <= Node.val <= 100

  • 0 <= k <= 2 * 109

這道旋轉鏈表的題和之前那道 Rotate Array 很類似,但是比那道要難一些,因為鏈表的值不能通過下表來訪問,只能一個一個的走,博主剛開始拿到這題首先想到的就是用快慢指針來解,快指針先走k步,然后兩個指針一起走,當快指針走到末尾時,慢指針的下一個位置是新的順序的頭結點,這樣就可以旋轉鏈表了,自信滿滿的寫完程序,放到 OJ 上跑,以為能一次通過,結果跪在了各種特殊情況,首先一個就是當原鏈表為空時,直接返回NULL,還有就是當k大于鏈表長度和k遠遠大于鏈表長度時該如何處理,需要首先遍歷一遍原鏈表得到鏈表長度n,然后k對n取余,這樣k肯定小于n,就可以用上面的算法了,代碼如下:

 解法一:

class Solution {
public:
    ListNode *rotateRight(ListNode *head, int k) {
        if (!head) return NULL;
        int n = 0;
        ListNode *cur = head;
        while (cur) {
            ++n;
            cur = cur->next;
        }
        k %= n;
        ListNode *fast = head, *slow = head;
        for (int i = 0; i < k; ++i) {
            if (fast) fast = fast->next;
        }
        if (!fast) return head;
        while (fast->next) {
            fast = fast->next;
            slow = slow->next;
        }
        fast->next = head;
        fast = slow->next;
        slow->next = NULL;
        return fast;
    }
};

這道題還有一種解法,跟上面的方法類似,但是不用快慢指針,一個指針就夠了,原理是先遍歷整個鏈表獲得鏈表長度n,然后此時把鏈表頭和尾鏈接起來,在往后走 n - k%n 個節點就到達新鏈表的頭結點前一個點,這時斷開鏈表即可,代碼如下:

class Solution {
public:
    ListNode *rotateRight(ListNode *head, int k) {
        if (!head) return NULL;
        int n = 1;
        ListNode *cur = head;
        while (cur->next) {
            ++n;
            cur = cur->next;
        }
        cur->next = head;
        int m = n - k % n;
        for (int i = 0; i < m; ++i) {
            cur = cur->next;
        }
        ListNode *newhead = cur->next;
        cur->next = NULL;
        return newhead;
    }
};

關于“C++怎么旋轉鏈表”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

修水县| 和顺县| 卓尼县| 清涧县| 电白县| 贵港市| 韶山市| 驻马店市| 杭锦旗| 贵溪市| 安顺市| 安丘市| 宜城市| 三江| 米脂县| 襄垣县| 北辰区| 威海市| 朝阳区| 松江区| 龙门县| 新巴尔虎右旗| 额尔古纳市| 石家庄市| 宜君县| 温宿县| 平顶山市| 门头沟区| 正镶白旗| 姚安县| 米易县| 辽宁省| 平泉县| 黑龙江省| 贵溪市| 托克逊县| 中宁县| 达州市| 芜湖县| 宜黄县| 祥云县|