人人干97-人人干操-人人干狠狠操-人人干美女-国产人妖在线-国产人妖在线播放

學了鏈表牛刀小試,三種做法都吃透就算是學會了:環(huán)球關(guān)注
時間:2023-02-11 13:56:27  來源:Coder梁  
1
聽新聞

關(guān)注、星標下方公眾號,和你一起成長


(資料圖片)

作者 | 梁唐

出品 | 公眾號:Coder梁(ID:Coder_LT)

大家好,我是梁唐。

今天我們繼續(xù)來挑戰(zhàn)鏈表,來看一道LeetCode當中的一道經(jīng)典問題——206.反轉(zhuǎn)鏈表。

這道題在很多公司的面試和筆試題中都有出現(xiàn),我就曾經(jīng)遇到過。絕對算是鏈表領(lǐng)域的經(jīng)典例題了,如果最近剛好要參加面試筆試的同學,那么千萬不要錯過,說不定就遇上了。

我們先來看看題面。

206. 反轉(zhuǎn)鏈表

給你單鏈表的頭節(jié)點 head,請你反轉(zhuǎn)鏈表,并返回反轉(zhuǎn)后的鏈表。

分析

題面還是比較直接的,就是讓我們將一個給定的鏈表來翻轉(zhuǎn)。

最簡單最取巧的方法當然是先遍歷一遍鏈表,將所有元素存進數(shù)組之后,再認為構(gòu)造一個鏈表。這樣做當然不能說不行,只不過在面試當中通常是無法令面試官滿意的。

因為我們根本沒有利用好給定我們的鏈表,額外地消耗了內(nèi)存空間。所以如果在面試當中遇到,面試官是不會只滿足于聽到這樣的回答的。那么,我們又該如何在不創(chuàng)建新鏈表的前提下完成翻轉(zhuǎn)呢?

對于這個問題,這題很好心地在進階里面給了我們提示,可以使用迭代或者遞歸的方法。

我個人感覺這兩種方法難度差不多,不過從理解難度上來說,遞歸的方法更簡單直觀一些。

遞歸法

為什么說遞歸的方法稍微更直觀呢?因為我們可以把遞歸函數(shù)本身當成是一個能夠在更小范圍內(nèi)運作的黑盒,接著,我們要做的就是像是套娃一樣,讓它能夠在更大的范圍當中實現(xiàn)同樣的功能。

比如在這題當中,我們要使用遞歸來實現(xiàn)reverseList函數(shù)。我們先假設(shè),它能夠在比當前更小的范圍內(nèi)運行。對于當前輸入來說是head開頭的鏈表,那么head->next開頭的鏈表就可以看成是比當前范圍更小的范圍。我們假設(shè)reverseList能夠?qū)?code>head->next開頭的鏈表翻轉(zhuǎn),我們要在此基礎(chǔ)上構(gòu)造出以head開頭翻轉(zhuǎn)的結(jié)果。

假設(shè)當前的輸入是[1, 2, 3, 4, 5],當前head指向1。head->next指向[2, 3, 4, 5]。調(diào)用reverseList之后可以得到[5, 4, 3, 2]。所以我們要做的把head放到遞歸結(jié)果的末尾。

所以我們要做的就很簡單,只有兩步。第一步遞歸調(diào)用reverseList,傳入head->next拿到結(jié)果。第二步,將head插入到遞歸返回的鏈表末尾。

由于在本題中鏈表都是通過頭節(jié)點表示的,所以我們要先遍歷一次到達鏈表的結(jié)尾。不要忘了處理一下邊界情況,即head為空或者是head->next為空的情況。

這些都想明白的話,代碼自然也就出來了:

classSolution{public:ListNode*reverseList(ListNode*head){//處理邊界if(head==nullptr||head->next==nullptr)returnhead;//遞歸調(diào)用autocur=reverseList(head->next);//遍歷到鏈表的最后一個節(jié)點autotmp=cur;while(tmp->next!=nullptr)tmp=tmp->next;//插入headtmp->next=head;head->next=nullptr;returncur;}};

改進

這里我們?yōu)榱饲蟪鲦湵碜詈笠粋€節(jié)點在遞歸當中使用了循環(huán),通過遍歷的方式去找了最末的節(jié)點。

實際上我們大可以不必如此,我們直接讓遞歸函數(shù)也返回末尾的指針即可。但這樣的話,我們就修改了返回值的類型,所以就要單獨寫一個遞歸來實現(xiàn)了。整體的原理和剛才是一樣的,只不過我們稍作加工,讓遞歸能夠既返回頭節(jié)點也返回尾節(jié)點。我們就不用再去額外遍歷了。

下面這段代碼的核心邏輯和之前是一樣的,只是優(yōu)化了遞歸返回的部分。

classSolution{public:pairreverse(ListNode*head){//處理邊界if(head==nullptr||head->next==nullptr)returnmake_pair(head,head);//遞歸autotmp=reverse(head->next);//將head插入到末尾tmp.second->next=head;head->next=nullptr;//返回新結(jié)果returnmake_pair(tmp.first,head);}ListNode*reverseList(ListNode*head){returnreverse(head).first;}};

迭代

理解完了遞歸的做法之后,我們再來思考:如果不使用遞歸,那么這道題又該怎么解決呢?

其實并不難,只需要理解一點就可以搞定。那就是對于鏈表來說,我們可以在任何節(jié)點插入元素。既然如此,我們既可以每次插入在末尾,自然也可以插入在頭部。如果我們每次插入元素都在頭部的話,得到的鏈表中的元素順序剛好和之前相反。

所以我們只需要再創(chuàng)建一個鏈表,一邊遍歷,一邊將讀取到的元素插入在新鏈表的頭部,最后返回即可。

這里可以使用之前介紹的虛擬頭節(jié)點的技巧來簡化代碼:

classSolution{public:ListNode*reverseList(ListNode*head){if(head==nullptr)returnhead;autopt=head;//新鏈表的虛擬頭節(jié)點autoret=newListNode(0);while(pt!=nullptr){autocur=pt;pt=pt->next;//插入在ret指針之后cur->next=ret->next;ret->next=cur;}returnret->next;}};

這道題雖然難度不大,但是正解的兩種方法都需要對鏈表這個數(shù)據(jù)結(jié)構(gòu)本身的特點有比較深入的理解以及一定的代碼能力才能通過。除了這題之外,還有LeetCode19 刪除鏈表倒數(shù)第n個元素這題也非常不錯。我個人認為不如這題經(jīng)典,所以就不過多贅述了,感興趣的同學可以自己去找來練習一下。

感謝大家的閱讀,如果喜歡的話,懇請幫忙轉(zhuǎn)發(fā)擴散。算法學習之旅,與你同行。

喜歡本文的話不要忘記三連~

關(guān)鍵詞: 遞歸函數(shù) 因為我們

尝到了甜头两人每天都会想方设法| 被蹂躏的她 电影| 特级毛片在线大全免费播放| 精品人妻VA出轨中文字幕| 99久久国产综合精品麻豆| 玩乡下黄花小处雏女| 久久人妻内射无码一区三区| 草莓榴莲秋葵绿丝污免费版18| 亚洲AV无码国产精品久久| 内射人妻无码色AV| 国产V亚洲V天堂无码久久久| 亚洲中文字幕AⅤ天堂| 强被迫伦姧在线观看无码| 国产午夜精华无码网站| 最新高清中文字幕免费MV| 天天摸天天碰天天添| 久久一本精品久久精品66| 粗大黑人巨茎大战欧美成人免费看 | 精品少妇人妻AV无码专区| А√天堂资源在线官网BT| 亚洲AV无码一区二区少妇 | 亚洲国产精品日韩AV专区| 欧美日韩亚洲中文字幕二区| 国产午夜精品一区二区三区| 9999国产精品欧美久久久久久| 无码一区二区三区| 男男腐啪GⅤ小受无套进入| 国产精品亲子乱子伦XXXX裸| 70老少配另类BBW| 性极强的岳让我满足| 欧美黑人性暴力猛交喷水| 国产啪亚洲国产精品无码| 国产蜜芽尤物在线一区| 欧美国产成人久久精品| 国产 精品 自在自线| 永久免费看照片的聊骚软件| 双腿扒开调教羞辱惩罚视频| 免费av网站在线观看| 国产肉丝袜在线观看| AV无码一区二区大桥久未| 亚洲国产欧美在线看片一国产| 全力以赴的行动派第二季| 精品无码成人网站久久久久久| 成人精品视频一区二区| 艳妇乳肉豪妇荡乳ⅩXXOO小说| 熟女少妇a性色生活片毛片 | 国产偷国产偷亚洲清高孕妇| JAPANESEHD熟女熟妇伦| 亚洲精品成人在线| 日韩一区二区三区视频| 久久婷婷日日澡天天添| 国产精品夜间视频香蕉| SLEEP强弙VIDE○SHO| 亚洲欧美日韩二三区在线| 熟女内射婷婷直播| 妺妺窝人体色www仙踪林| 国产男男GAY做受ⅩXX小说| 99精产国品一二三产区区别在线| 亚洲国产精品无码久久九九大片| 日韩精品成人无码专区免费| 老熟女高潮一区二区三区| 国产色综合天天综合网| WWW夜插内射视频网站| 亚洲中文字幕无码一区无广告 | 深田えいみ禁欲后被隔壁人妻| 领导边摸边吃奶边做爽在线观看| 国产在线不卡人成视频| 凹凸国产熟女精品视频国语| 伊人久久大香线蕉AV色| 亚洲AV纯肉无码精品动漫| 三人一起玩弄娇妻高潮| 某处紧密的结合在一起| 极品丰满熟妇人妻无码| 丰满人妻熟妇乱又伦精品 | 久久久久夜色精品国产明星| 国产乱了真实在线观看| 成人国产精品一区二区网站公司| 中国熟妇人妻XXXXXHD| 亚洲国产精品久久久久制服| 婷婷久久香蕉五月综合加勒比| 女儿儿媳陪自己玩的心情说说| 饥渴的少妇2中文字幕| 国产成A人亚洲精V品无码性色| CAOPOREN个人免费公开| 又大又粗进出白浆直流视频在线| 亚洲AV无码专区在线播放| 熟睡入侵JEALOUSVUE| 亲孑伦一区二区三区| 美女高潮无套内谢| 精品韩国AV无码一区二区三区| 国产精品乱子伦XXXX| 成熟老太毛茸茸BBWBBW| AV大片在线无码免费| 一二三四在线观看免费高清视频| 亚洲VA欧美VA天堂V国产综合| 天天看片天天AV免费观看| 日本不卡高清兔费V| 麻豆文化传媒精品观看网站| 精品久久久久久中文字幕202| 国产成人综合一区人人| 纯肉无遮挡H肉动漫在线观看3D| 97人妻碰碰碰久久久久| 伊人婷婷六月狠狠狠去| 亚洲欧美日本A∨在线观看| 亚洲AV日韩精品久久久久久| 污污污污污污网站| 少妇高潮无套内谢麻豆传| 日本丰满熟妇55乱偷| 欧美极品少妇XXXXⅩ猛交| 麻花豆传媒剧国产免费| 久久久久久久精品国产亚洲| 激情久久AV一区AV二区AV三| 国产午夜成人免费看片APP| 国产成人无码VA在线观看| 大香伊蕉在人线国产最新75| 把女人弄爽特黄A大片| BBWBBW肥妇BBWBBW| 18禁又污又黄又爽的网站| 再灬再灬再灬深一点舒服| 亚洲一久久久久久久久| 亚洲AV无码AV在线影院| 无码人妻斩一区二区三区| 熟妇人妻中文A∨无码| 日本熟妇人妻XXⅩHD| 人妻熟妇乱又伦精品无码专区| 欧美精品国产综合久久| 妺妺窝人体色www聚色窝图片 | 交换配乱吟粗大SNS840| 国产亚洲精久久久久久无码| 国产精品一区二区国产馆蜜桃| 国产成人无码精品午夜福利A| 高潮到不停喷水的免费视频| 成人免费无码H在线观看不卡| А√天堂资源地址在线| ZPS无套内射视频免费播放| 777亚洲精品乱码久久久久久| 在线观看AV网站永久免费观看| 亚洲最大AV无码网站| 亚洲中文字幕无码一区| 野外XXXXFREEXXXX日| 亚洲最大的熟女水蜜桃AV网站| 亚洲午夜成人精品无码| 亚洲中文字幕无码久久2017| 亚洲综合日韩久久成人AV| 野花大全在线观看免费高清| 伊人久久大香线蕉亚洲五月天| 永久黄网站免费视频性色| 尤物在线视频.YW163.成年| 岳丰满多毛的大隂户老太的介绍| 在线黄色网站观看汙| 中文字幕乱近親相姦| 999在线视频精品免费播放观看| 24小时在线看免费观看直播| 99精品视频九九精品视频| 99偷拍视频精品一区二区| JZZJZZ免费观看视频| А天堂中文在线官网| 啊灬啊灬啊灬快灬高潮了霸总| 9LPORM自拍视频区九色| WWWらだ在线天堂中文在线| 阿娇被躁120分钟视频| 菠萝菠萝蜜在线观看| 俄罗斯人与ZOOM人的区别| 国产白嫩漂亮美女在线观看| 国产精品免费久久久久影院仙踪林 | 人妻少妇无码中文幕久久| 色婷婷亚洲精品综合影院| 无码熟妇人妻AV在线一| 亚洲爆乳大丰满无码专区| 野花日本免费完整版高清版| 777琪琪午夜理论电影网| 草草CCYY免费看片线路| 国产成人综合亚洲精品| 精品国产A∨无码一区二区三区| 狂猛欧美激情性XXXX大豆行情 | 国产精品自在在线午夜 | 亚洲精品美女久久久久99| 在线A级毛片无码免费真人| JEALOUSVUE成熟少归| 国产97在线 | 亚洲| 黑人玩弄人妻一区二区三区| 久久婷婷色五月综合图区| 欧美人与动牲交A精品| 熟妇人妻久久中文字幕 | 久久久久国色AV免费观看性色| 男人躁女人到高潮视频| 日韩一区二区三区免费高清 | 国产精品美女一区二区三区| 精品无人区卡卡卡卡卡二卡三乱码| 蜜臀AV无码精品人妻色欲| 日韩国产成人精品视频| 学生无码AV一区二区三区| 伊人色综合久久天天小片| メスのちトラレ_在线| 国产精品日本一区二区不卡视频| 久久99精品网久久| 欧美肉体裸交做爰XXXⅩ性玉蒲 | 午夜成人爽爽爽视频在线观看| 亚洲色老汉AV无码专区最| ASS鲜嫩鲜嫩PICS日本|