欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)LeetCode(61.旋轉(zhuǎn)鏈表)

 更新時(shí)間:2021年07月16日 10:37:23   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(61.旋轉(zhuǎn)鏈表),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 61. Rotate List 旋轉(zhuǎn)鏈表

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

Example 1:

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

Example 2:

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

這道旋轉(zhuǎn)鏈表的題和之前那道 Rotate Array 很類似,但是比那道要難一些,因?yàn)殒湵淼闹挡荒芡ㄟ^下表來訪問,只能一個(gè)一個(gè)的走,博主剛開始拿到這題首先想到的就是用快慢指針來解,快指針先走k步,然后兩個(gè)指針一起走,當(dāng)快指針走到末尾時(shí),慢指針的下一個(gè)位置是新的順序的頭結(jié)點(diǎn),這樣就可以旋轉(zhuǎn)鏈表了,自信滿滿的寫完程序,放到 OJ 上跑,以為能一次通過,結(jié)果跪在了各種特殊情況,首先一個(gè)就是當(dāng)原鏈表為空時(shí),直接返回NULL,還有就是當(dāng)k大于鏈表長度和k遠(yuǎn)遠(yuǎn)大于鏈表長度時(shí)該如何處理,需要首先遍歷一遍原鏈表得到鏈表長度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;
    }
};

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

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;
    }
};

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(61.旋轉(zhuǎn)鏈表)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)旋轉(zhuǎn)鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 與ASCII碼相關(guān)的C語言字符串操作函數(shù)

    與ASCII碼相關(guān)的C語言字符串操作函數(shù)

    這篇文章主要介紹了與ASCII碼相關(guān)的C語言字符串操作函數(shù),分別是將字符轉(zhuǎn)換為ASCII碼的toascii()函數(shù)和根據(jù)ASCII碼進(jìn)行字符串比較的strcoll()函數(shù),需要的朋友可以參考下
    2015-08-08
  • 使用C++調(diào)用Python代碼的方法步驟

    使用C++調(diào)用Python代碼的方法步驟

    這篇文章主要介紹了使用C++調(diào)用Python代碼的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 教你用c++從頭開始實(shí)現(xiàn)決策樹

    教你用c++從頭開始實(shí)現(xiàn)決策樹

    從頭實(shí)現(xiàn)一個(gè)分類決策樹分類器似乎是一個(gè)適當(dāng)?shù)奶魬?zhàn)。這已經(jīng)被證明是一個(gè)測試但有益的學(xué)習(xí)旅程,我想分享一些我在這個(gè)過程中的主要經(jīng)驗(yàn),對c++實(shí)現(xiàn)決策樹相關(guān)知識感興趣的朋友一起看看吧
    2021-05-05
  • C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)實(shí)戰(zhàn)教學(xué)

    C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)實(shí)戰(zhàn)教學(xué)

    在本篇文章里小編給大家分享了關(guān)于C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)實(shí)戰(zhàn)教學(xué)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2019-01-01
  • C++ 約瑟夫環(huán)的實(shí)例代碼

    C++ 約瑟夫環(huán)的實(shí)例代碼

    這篇文章主要介紹了C++ 約瑟夫環(huán)的實(shí)例代碼的相關(guān)資料,希望通過本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • C++實(shí)現(xiàn)拼圖游戲代碼(graphics圖形庫)

    C++實(shí)現(xiàn)拼圖游戲代碼(graphics圖形庫)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)拼圖游戲代碼,帶有g(shù)raphics圖形庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C/C++解析文件名和目錄路徑的方法

    C/C++解析文件名和目錄路徑的方法

    #include <libgen.h> 是一個(gè) C/C++ 語言的頭文件,主要用于字符串處理,特別是在處理文件路徑時(shí),它提供了一些函數(shù)來幫助你解析文件名和目錄路徑,本文就給大家介紹一下C/C++解析文件名和目錄路徑的方法,需要的朋友可以參考下
    2024-10-10
  • C/C++實(shí)現(xiàn)發(fā)送與接收HTTP/S請求的示例代碼

    C/C++實(shí)現(xiàn)發(fā)送與接收HTTP/S請求的示例代碼

    HTTP(Hypertext Transfer Protocol)是一種用于傳輸超文本的協(xié)議,它是一種無狀態(tài)的、應(yīng)用層的協(xié)議,用于在計(jì)算機(jī)之間傳輸超文本文檔,通常在 Web 瀏覽器和 Web 服務(wù)器之間進(jìn)行數(shù)據(jù)通信,本文給大家介紹了C/C++發(fā)送與接收HTTP/S請求,需要的朋友可以參考下
    2023-11-11
  • C++實(shí)現(xiàn)棧的操作(push和pop)

    C++實(shí)現(xiàn)棧的操作(push和pop)

    這篇文章主要介紹了C++實(shí)現(xiàn)棧的操作(push和pop),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語言中#define在多行宏定義出錯(cuò)的原因及分析

    C語言中#define在多行宏定義出錯(cuò)的原因及分析

    這篇文章主要介紹了C語言中#define在多行宏定義出錯(cuò)的原因及分析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論