最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年07月19日 11:05:11   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(倒置鏈表之二),本篇文章通過簡要的案例,講解了該項(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


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

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

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

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

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

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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用C語言實(shí)現(xiàn)從文本文件中讀取數(shù)據(jù)后進(jìn)行排序的功能

    用C語言實(shí)現(xiàn)從文本文件中讀取數(shù)據(jù)后進(jìn)行排序的功能

    這是一個十分可靠的程序,這個程序的查錯能力非常強(qiáng)悍。程序包含了文件操作,歸并排序和字符串輸入等多種技術(shù)。對大家學(xué)習(xí)C語言很有幫助,有需要的一起來看看。
    2016-08-08
  • C++深入了解模板的使用

    C++深入了解模板的使用

    這篇文章主要介紹了C++中模板(Template)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 淺談C++11的std::function源碼解析

    淺談C++11的std::function源碼解析

    類模版std::function是一種通用的多態(tài)函數(shù)包裝器std::function的實(shí)例可以對任何可以調(diào)用的目標(biāo)實(shí)體進(jìn)行存儲、復(fù)制、和調(diào)用操作,本文詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-06-06
  • C++小知識:用合適的工具來分析你的代碼

    C++小知識:用合適的工具來分析你的代碼

    今天小編就為大家分享一篇關(guān)于C++小知識:用合適的工具來分析你的代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C++11中std::thread線程實(shí)現(xiàn)暫停(掛起)功能

    C++11中std::thread線程實(shí)現(xiàn)暫停(掛起)功能

    本文主要介紹了C++11中std::thread線程實(shí)現(xiàn)暫停(掛起)功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • c++實(shí)現(xiàn)通用參數(shù)解析類示例

    c++實(shí)現(xiàn)通用參數(shù)解析類示例

    使用命令行執(zhí)行程序的時(shí)候在程序后可跟多個參數(shù)列表,而main函數(shù)的argc和argv分別存儲了相關(guān)的參數(shù)個數(shù)和參數(shù)內(nèi)容,而循環(huán)輸入相關(guān)的時(shí)候就需要用戶自己來解析相關(guān)參數(shù)。以下代碼用c++的方式實(shí)現(xiàn)了相關(guān)解析的封裝,使用起來非常方便
    2014-03-03
  • C與C++ 無參函數(shù)的區(qū)別解析

    C與C++ 無參函數(shù)的區(qū)別解析

    在《C++ 編程思想》:“關(guān)于無參函數(shù)聲明,C與C++有很大的差別。在C語言中,聲明int fun1(),意味著一個可以有任意數(shù)目和類型的函數(shù);而在C++中,指的卻是一個沒有參數(shù)的函數(shù)”
    2013-07-07
  • C++移動語義介紹與使用講解

    C++移動語義介紹與使用講解

    首先,移動語義和完美轉(zhuǎn)發(fā)這兩個概念是在C++的模板編程的基礎(chǔ)上,新增的特性,主要是配合模板來使用。本篇會從C++的值類型,到移動拷貝與移動賦值來理解移動語義與完美轉(zhuǎn)發(fā)
    2022-09-09
  • C語言 模擬實(shí)現(xiàn)strcpy與strcat函數(shù)詳解

    C語言 模擬實(shí)現(xiàn)strcpy與strcat函數(shù)詳解

    這篇文章主要介紹了怎樣用C語言模擬實(shí)現(xiàn)strcpy與strcat函數(shù),strcpy()函數(shù)是C語言中的一個復(fù)制字符串的庫函數(shù),strcat()函數(shù)的功能是實(shí)現(xiàn)字符串的拼接
    2022-04-04
  • C語言堆實(shí)現(xiàn)建堆算法和堆排序

    C語言堆實(shí)現(xiàn)建堆算法和堆排序

    本文主要介紹了C語言堆實(shí)現(xiàn)建堆算法和堆排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09

最新評論

南平市| 商河县| 井陉县| 武穴市| 安平县| 同江市| 南汇区| 卢氏县| 石门县| 汝南县| 元朗区| 巨鹿县| 巴马| 子洲县| 安吉县| 新巴尔虎右旗| 怀化市| 屏南县| 海安县| 余干县| 姜堰市| 长治县| 中江县| 泗洪县| 荣成市| 英吉沙县| 修文县| 连城县| 昔阳县| 荣昌县| 石家庄市| 益阳市| 连南| 灵宝市| 泽州县| 顺昌县| 涪陵区| 麻阳| 九台市| 镇雄县| 英超|