亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++實(shí)現(xiàn)LeetCode(92.倒置鏈表之二)

 更新時(shí)間:2021年07月19日 11:05:11   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(倒置鏈表之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 92. Reverse Linked List II 倒置鏈表之二

Reverse a linked list from position m to n. Do it in one-pass.

Note: 1 ≤ m ≤ n ≤ length of list.

Example:

Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL


很奇怪為何沒有倒置鏈表之一,就來(lái)了這個(gè)倒置鏈表之二,不過(guò)猜也能猜得到之一就是單純的倒置整個(gè)鏈表,而這道作為延伸的地方就是倒置其中的某一小段。對(duì)于鏈表的問(wèn)題,根據(jù)以往的經(jīng)驗(yàn)一般都是要建一個(gè)dummy node,連上原鏈表的頭結(jié)點(diǎn),這樣的話就算頭結(jié)點(diǎn)變動(dòng)了,我們還可以通過(guò)dummy->next來(lái)獲得新鏈表的頭結(jié)點(diǎn)。這道題的要求是只通過(guò)一次遍歷完成,就拿題目中的例子來(lái)說(shuō),變換的是2,3,4這三個(gè)點(diǎn),我們需要找到第一個(gè)開始變換結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn),只要讓pre向后走m-1步即可,為啥要減1呢,因?yàn)轭}目中是從1開始計(jì)數(shù)的,這里只走了1步,就是結(jié)點(diǎn)1,用pre指向它。萬(wàn)一是結(jié)點(diǎn)1開始變換的怎么辦,這就是我們?yōu)樯兑胐ummy結(jié)點(diǎn)了,pre也可以指向dummy結(jié)點(diǎn)。然后就要開始交換了,由于一次只能交換兩個(gè)結(jié)點(diǎn),所以我們按如下的交換順序:

1 -> 2 -> 3 -> 4 -> 5 -> NULL

1 -> 3 -> 2 -> 4 -> 5 -> NULL

1 -> 4 -> 3 -> 2 -> 5 -> NULL

我們可以看出來(lái),總共需要n-m步即可,第一步是將結(jié)點(diǎn)3放到結(jié)點(diǎn)1的后面,第二步將結(jié)點(diǎn)4放到結(jié)點(diǎn)1的后面。這是很有規(guī)律的操作,那么我們就說(shuō)一個(gè)就行了,比如剛開始,pre指向結(jié)點(diǎn)1,cur指向結(jié)點(diǎn)2,然后我們建立一個(gè)臨時(shí)的結(jié)點(diǎn)t,指向結(jié)點(diǎn)3(注意我們用臨時(shí)變量保存某個(gè)結(jié)點(diǎn)就是為了首先斷開該結(jié)點(diǎn)和前面結(jié)點(diǎn)之間的聯(lián)系,這可以當(dāng)作一個(gè)規(guī)律記下來(lái)),然后我們斷開結(jié)點(diǎn)2和結(jié)點(diǎn)3,將結(jié)點(diǎn)2的next連到結(jié)點(diǎn)4上,也就是 cur->next = t->next,再把結(jié)點(diǎn)3連到結(jié)點(diǎn)1的后面結(jié)點(diǎn)(即結(jié)點(diǎn)2)的前面,即 t->next = pre->next,最后再將原來(lái)的結(jié)點(diǎn)1和結(jié)點(diǎn)2的連接斷開,將結(jié)點(diǎn)1連到結(jié)點(diǎn)3,即 pre->next = t。這樣我們就完成了將結(jié)點(diǎn)3取出,加入結(jié)點(diǎn)1的后方。第二步將結(jié)點(diǎn)4取出,加入結(jié)點(diǎn)1的后方,也是同樣的操作,這里就不多說(shuō)了,請(qǐng)大家自己嘗試下吧,參見代碼如下:

class Solution {
public:
    ListNode *reverseBetween(ListNode *head, int m, int n) {
        ListNode *dummy = new ListNode(-1), *pre = dummy;
        dummy->next = head;
        for (int i = 0; i < m - 1; ++i) pre = pre->next;
        ListNode *cur = pre->next;
        for (int i = m; i < n; ++i) {
            ListNode *t = cur->next;
            cur->next = t->next;
            t->next = pre->next;
            pre->next = t;
        }
        return dummy->next;
    }
};

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

相關(guān)文章

  • 深入C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式詳解

    深入C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式詳解

    本篇文章是對(duì)C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用C++描繪心形

    使用C++描繪心形

    本文給大家分享的是一個(gè)使用c++繪制心形的代碼,雖然情人節(jié)已經(jīng)過(guò)去了,但是只要有心,天天都是情人節(jié)~~哈哈,讓那些說(shuō)程序猿都是木頭的人去死吧。
    2015-03-03
  • C/C++程序開發(fā)中實(shí)現(xiàn)信息隱藏的三種類型

    C/C++程序開發(fā)中實(shí)現(xiàn)信息隱藏的三種類型

    這篇文章主要介紹了C/C++程序開發(fā)中實(shí)現(xiàn)信息隱藏的三種類型的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • 使用C語(yǔ)言生成圖片的base64編碼的代碼實(shí)現(xiàn)

    使用C語(yǔ)言生成圖片的base64編碼的代碼實(shí)現(xiàn)

    Base64編碼是一種廣泛使用的編碼方案,將任意二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為可打印的ASCII字符字符串,在實(shí)際應(yīng)用中,Base64編碼常見于電子郵件附件、數(shù)據(jù)庫(kù)中存儲(chǔ)非文本數(shù)據(jù)等多種場(chǎng)景,本文將給大家介紹使用C語(yǔ)言生成圖片的base64編碼的代碼實(shí)現(xiàn),需要的朋友可以參考下
    2024-08-08
  • C語(yǔ)言實(shí)現(xiàn)翻譯功能

    C語(yǔ)言實(shí)現(xiàn)翻譯功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的翻譯功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解C語(yǔ)言內(nèi)核中的鏈表與結(jié)構(gòu)體

    詳解C語(yǔ)言內(nèi)核中的鏈表與結(jié)構(gòu)體

    Windows內(nèi)核中是無(wú)法使用vector容器等數(shù)據(jù)結(jié)構(gòu)的,當(dāng)我們需要保存一個(gè)結(jié)構(gòu)體數(shù)組時(shí),就需要使用內(nèi)核中提供的專用鏈表結(jié)構(gòu)。本文分享了幾個(gè)內(nèi)核中使用鏈表存儲(chǔ)多個(gè)結(jié)構(gòu)體的通用案例,希望對(duì)你有所幫助
    2022-09-09
  • C語(yǔ)言 從根本上理解指針

    C語(yǔ)言 從根本上理解指針

    C語(yǔ)言這門課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語(yǔ)言的學(xué)習(xí),對(duì)指針的掌握是非常重要的,本文將具體針對(duì)指針的基礎(chǔ)做詳盡的介紹
    2022-04-04
  • c++智能指針的超詳細(xì)講解

    c++智能指針的超詳細(xì)講解

    c++程序設(shè)計(jì)中經(jīng)常會(huì)用堆內(nèi)存,程序員要自己管理內(nèi)存的申請(qǐng)和釋放,使用原始指針,容易造成堆內(nèi)存泄漏(忘記釋放),二次釋放,使用智能指針能更好的管理堆內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于c++智能指針的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C++演講比賽管理系統(tǒng)實(shí)現(xiàn)流程實(shí)例

    C++演講比賽管理系統(tǒng)實(shí)現(xiàn)流程實(shí)例

    這篇文章主要介紹了C++演講比賽管理系統(tǒng)實(shí)現(xiàn)流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)分組導(dǎo)出

    Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)分組導(dǎo)出

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)分組導(dǎo)出,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定參考價(jià)值,需要的可以了解一下
    2022-06-06

最新評(píng)論