精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

鏈表問題,如何優雅遞龜嗎?

開發 前端
今天「小熊」主要介紹采用「遞歸」的策略,秒殺「鏈表」相關問題,使得代碼更「優雅」,并以兩道常見的面試題作為例題來講解,供大家參考,希望對大家有所幫助。

 [[403833]]

本文轉載自微信公眾號「程序員小熊」,作者程序員小熊。轉載本文請聯系程序員小熊公眾號。

前言

大家好,我是來自華為的「程序員小熊」。相信絕大部分童鞋都知道,在處理與「鏈表」相關問題時,常用的解題套路主要包括「雙指針」、「迭代」和「虛擬頭節點」等等。

今天「小熊」主要介紹采用「遞歸」的策略,秒殺「鏈表」相關問題,使得代碼更「優雅」,并以兩道常見的面試題作為例題來講解,供大家參考,希望對大家有所幫助。

鏈表與遞歸

鏈表具有天然的遞歸性,一個鏈表可以看出頭節點后面掛接一個更短的鏈表,這個更短的鏈表是以原鏈表的頭節點的下一節點為頭節點,依次內推,直到最后的更短的鏈表為空,空本身也是一個鏈表(最基礎的)。

以單鏈表 1->2->3->null 為例子,如下圖示:

原鏈表

將原鏈表看出頭節點 1 后掛接一個更短的鏈表

頭節點+更短鏈表

繼續拆解,直到無法拆解

更更短鏈表

更更更短鏈表

有了這樣的思考,很多「鏈表」相關問題,都可以采用「遞歸」的思路來解答。

劍指 Offer 24. 反轉鏈表

  1. 定義一個函數,輸入一個鏈表的頭節點,反轉該鏈表并輸出反轉后鏈表的頭節點。 
  2.   
  3.  
  4. 示例: 
  5.  
  6. 輸入: 1->2->3->4->5->NULL 
  7. 輸出: 5->4->3->2->1->NULL 
  8.   
  9.  
  10. 限制: 
  11. 0 <= 節點個數 <= 5000 

解題思路

要反轉鏈表,即將原鏈表的頭節點變為新鏈表的尾節點,原鏈表的尾節點變為新鏈表的頭節點。如下圖示:

反轉之前:

原鏈表

反轉之后:

新鏈表

主要策略主要有:1、直接修改鏈表的值,如上圖中的原鏈表圖所示,將原鏈表值 1 的頭節點改為原鏈表尾節點的值,依次類推;2、讓遍歷整個鏈表,讓鏈表的尾節點指向其前一個節點,依次類推。

雖然這兩個策略都可行,不過在面試中通常要求采用「策略2」。

由上面的「遞歸與鏈表」可知,本題也可以采用「遞歸法」去求解。

具體如何通過「遞歸」去解答呢?見下面例子。

「舉例」

鏈表 1->2->3->null 為例子,如下圖示。

示例

不斷遍歷找到原鏈表為尾節點,即新鏈表的頭節點。

原鏈表尾節點

然后讓尾節點指向其前驅節點,依次類推。

遞歸反轉

詳細步驟,如下動圖示:

遞歸反轉單鏈表

Show me the Code

「C」

  1. struct ListNode* reverseList(struct ListNode* head){ 
  2.     /* 遞歸終止條件 */ 
  3.     if (head == NULL || head->next == NULL) { 
  4.         return head; 
  5.     } 
  6.  
  7.     /* 反轉當前所在的鏈表節點 */ 
  8.     struct ListNode* newHead = reverseList(head->next); 
  9.  
  10.     /* 由原鏈表的尾節點挨個指向其前驅節點 */ 
  11.     head->next->next = head; 
  12.  
  13.     /* 防止成環 */ 
  14.     head->next = NULL
  15.  
  16.     /* 返回新的鏈表頭節點 */ 
  17.     return newHead; 

「java」

  1. ListNode reverseList(ListNode head) { 
  2.     if (head == null || head.next == null) { 
  3.         return head; 
  4.     } 
  5.  
  6.     ListNode node = reverseList(head.next); 
  7.     head.next.next = head; 
  8.     head.next = null
  9.  
  10.     return node; 

當然本題也可以采用「迭代」的方法去做,其代碼(python 版)也很優雅,具體如下:

Show me the Code

「python」

  1. def reverseList(self, head: ListNode) -> ListNode: 
  2.     cur, pre = head, None 
  3.     while cur: 
  4.         cur.next, pre, cur = pre, cur, cur.next 
  5.          
  6.     return pre  

「復雜度分析」

時間復雜度:「O(n)」,n 是鏈表的長度。對鏈表的每個節點都進行了反轉操作。

空間復雜度:「O(n)」,n 是鏈表的長度。遞歸調用的棧空間,最多為 n 層。

203. 移除鏈表元素

  1. 給你一個鏈表的頭節點 head 和一個整數 val ,請你刪除鏈表中所有滿足  
  2.  
  3. Node.val == val 的節點,并返回 新的頭節點 。 
  4.  
  5. 示例 1: 
  6.  
  7. 輸入:head = [1,2,6,3,4,5,6], val = 6 
  8. 輸出:[1,2,3,4,5] 
  9.  
  10. 示例 2: 
  11.  
  12. 輸入:head = [], val = 1 
  13. 輸出:[] 
  14.  
  15. 示例 3: 
  16.  
  17. 輸入:head = [7,7,7,7], val = 7 
  18. 輸出:[] 

解題思路

要移除鏈表中給定值的節點,一般策略是「找到給點值的節點的前驅節點,然后讓其指向給定值的節點的后繼節點」。

例如要刪除鏈表 1->2->3->null 中,節點值為 3 的節點,就得先找到其前驅節點(值為 2 的節點),如下圖示:

刪除給定值的節點

由上面的「遞歸與鏈表」可知,本題同樣也可以采用「遞歸法」去求解,不斷刪除更短鏈表中給定值的節點,然后再將處理后的更短的鏈表,掛接在其前驅節點后。

「注意」最后要判斷原鏈表的頭節點是否是待移除的節點。

「舉例」

以鏈表 1->2->3->null 為例子,移除鏈表中給定值的節點的過程,如下動圖示。

示例動圖

Show me the Code

「C++」

  1. ListNode* removeElements(ListNode* head, int val) { 
  2.     /* 遞歸終止條件 */ 
  3.     if(head == NULL) { 
  4.         return NULL
  5.     } 
  6.  
  7.     /* 刪除鏈表中頭節點后值為 val 的元素的節點 */ 
  8.     head->next=removeElements(head->next,val); 
  9.  
  10.     /* 判斷頭節點是否為值為 val 的節點,再返回*/ 
  11.     return head->val==val ? head->next : head; 

「Golang」

  1. func removeElements(head *ListNode, val int) *ListNode { 
  2.     if head == nil { 
  3.         return head 
  4.     } 
  5.  
  6.     head.Next = removeElements(head.Next, val) 
  7.     if head.Val == val { 
  8.         return head.Next 
  9.     } 
  10.  
  11.     return head 

「復雜度分析」

時間復雜度:「O(n)」,n 是鏈表的長度。遞歸需要遍歷鏈表一次。

空間復雜度:「O(n)」,n 是鏈表的長度。遞歸調用棧,最多不會超過 n 層。

 

責任編輯:武曉燕 來源: 程序員小熊
相關推薦

2021-04-19 07:41:37

AcceptEmfile問題

2022-08-11 11:09:38

線上問題程序員

2019-03-21 15:30:05

JavaStream性能

2022-09-28 12:23:36

Promise代碼

2015-11-26 10:53:45

LinuxWindowsMac OS

2025-07-29 08:25:57

2021-01-19 10:35:49

JVM場景函數

2017-07-26 11:32:50

NETRabbitMQ系統集成

2021-03-24 10:20:50

Fonts前端代碼

2020-10-16 11:48:06

服務器系統運維

2025-06-24 08:25:00

Java并發編程線程

2023-10-19 19:42:25

IstioPodkubernetes

2023-10-10 13:23:18

空指針異常Java

2020-08-26 07:17:19

通信

2022-09-09 15:17:02

CentOS 7Linux

2024-06-24 14:19:48

2017-12-19 10:03:44

JavaLinux代碼

2024-11-13 16:37:00

Java線程池

2022-02-18 17:34:47

數組多維五維數組

2022-04-11 08:17:07

JVMJava進程
點贊
收藏

51CTO技術棧公眾號

在线视频三区| 欧美大尺度激情区在线播放| 青青草精品视频在线| 亚洲高清在线观看视频| 国产农村妇女精品一二区| 在线不卡中文字幕播放| 真人做人试看60分钟免费| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲三级电影网站| 国产精品久久一区主播| 老妇女50岁三级| 日本成人a网站| 欧美三日本三级三级在线播放| 91视频成人免费| 青青草观看免费视频在线| 蜜臀久久99精品久久久画质超高清 | 黄色国产一级视频| 天堂中文字幕av| 激情文学综合丁香| 91精品国产777在线观看| 欧美私人情侣网站| 精品人妻久久久久一区二区三区| 夜夜嗨网站十八久久| 亚洲色图15p| 国产老头和老头xxxx×| 欧美最新精品| 亚洲高清中文字幕| 亚洲欧美丝袜| 日本v片在线免费观看| 国产精品77777竹菊影视小说| 日韩免费观看在线观看| 国产3p在线播放| 国产丝袜在线播放| 国产精品国产三级国产普通话蜜臀 | 99热在线成人| 亚洲免费视频网站| 国产911在线观看| 色鬼7777久久| 成人污污视频在线观看| 国产欧美精品一区二区三区-老狼| 欧美不卡视频在线观看| 久久高清精品| 国产一区二区三区视频免费| 欧洲一级黄色片| 亚洲一区二区av| 在线影视一区二区三区| 无码精品a∨在线观看中文| 精精国产xxxx视频在线中文版 | 亚洲看片网站| 午夜视频免费在线| www.av精品| 97视频在线观看免费| 午夜激情福利电影| 最新精品国偷自产在线| 国产视频欧美视频| 野花社区视频在线观看| 偷拍一区二区| 午夜精品在线视频一区| 国产综合福利在线| 亚洲激情图片网| 欧美美女视频| 在线观看欧美成人| 日本免费www| 日本美女久久| www..com久久爱| 国产三区精品| jizz中国少妇| 国内久久婷婷综合| 91手机在线播放| 国产大片中文字幕| 亚洲不卡av不卡一区二区| 在线性视频日韩欧美| www.av天天| 日韩精品2区| 中日韩午夜理伦电影免费| 殴美一级黄色片| 精品国产91| 色婷婷av一区二区三区久久| 性爱在线免费视频| 你懂的国产精品| 久久久亚洲天堂| 日韩精品在线免费视频| 日本视频中文字幕一区二区三区| 日韩av免费在线播放| 少妇又紧又色又爽又刺激视频| 日本人妖一区二区| 国产精品视频中文字幕91| 中文字幕乱码视频| 秋霞午夜av一区二区三区| 成人激情综合网| 国产91免费看| wwww国产精品欧美| 一区二区91美女张开腿让人桶| av大全在线| 欧美性xxxx极品hd欧美风情| 香蕉视频禁止18| 欧美日韩伦理一区二区| 欧美电影免费观看完整版 | 国产亚洲成aⅴ人片在线观看| 日本成人黄色免费看| 第一页在线观看| 麻豆精品久久久| 97人人干人人| 色屁屁草草影院ccyycom| 久久久精品影视| 国产精品无码乱伦| 忘忧草在线影院两性视频| 欧美日本一区二区三区| 亚洲熟女一区二区| 欧美韩日一区| 欧美综合在线观看| 亚洲av无码乱码国产精品久久| 91日韩精品一区| 欧美日韩dvd| 午夜av成人| 亚洲国产高潮在线观看| 午夜国产福利视频| 欧美亚洲三级| 国产成人精品日本亚洲11| 日本xxxx人| 亚洲国产高清在线观看视频| 国产视频九色蝌蚪| 中文字幕日韩亚洲| 亚洲毛片在线免费观看| 91麻豆制片厂| 丝瓜av网站精品一区二区| 国产日本欧美一区| 五月婷婷丁香网| 亚洲欧美乱综合| 精品一区二区国产| 二区三区四区高清视频在线观看| 91丨porny丨中文| 超碰超碰超碰超碰超碰| 久久久加勒比| 亚洲香蕉成人av网站在线观看 | 亚洲综合999| 日韩成人av免费| 日韩电影在线视频| 国产精品免费视频久久久| 懂色av蜜臀av粉嫩av分享吧| 国产精品欧美综合在线| 亚洲一卡二卡区| gay欧美网站| 日韩精品在线免费| 国产又色又爽又黄的| 国产福利精品导航| 欧美a级黄色大片| 精品美女一区| 日韩一区二区三区在线播放| 中文字幕 国产| 欧美激情中文字幕| 一区二区三区韩国| 日韩国产一区二区| 国产色婷婷国产综合在线理论片a| 成人免费视频| 欧美视频在线观看一区二区| 欧洲美熟女乱又伦| 日韩电影免费一区| 精品欧美一区二区精品久久| 鲁鲁在线中文| 一本大道综合伊人精品热热 | 国产99久久久久| 日韩最新中文字幕| 视频在线亚洲| 欧美精品激情blacked18| 蜜桃视频久久一区免费观看入口| 亚洲国产综合在线| 日韩无码精品一区二区| 欧美福利电影在线观看| 川上优av一区二区线观看| 十九岁完整版在线观看好看云免费| 国产精品亚洲第一区在线暖暖韩国| 亚洲天堂av免费在线观看| 亚洲精品国产嫩草在线观看| 日韩亚洲第一页| 国产精品羞羞答答在线| 国产精品国产三级国产aⅴ入口| 久久精品亚洲天堂| 欧美午夜一区二区福利视频| 久久综合给合久久狠狠色| 高清电影一区| 在线看片第一页欧美| 97精品人妻一区二区三区| 一区二区三区视频在线看| 亚洲の无码国产の无码步美| 老司机久久99久久精品播放免费| 亚洲日本一区二区三区在线不卡| 欧美影院视频| 4k岛国日韩精品**专区| 99免在线观看免费视频高清| 欧美成人高清电影在线| yjizz国产| 最近日韩中文字幕| 91成人在线观看喷潮蘑菇| 久久精品30| 影音先锋亚洲视频| 欧美日韩麻豆| 91精品久久久久久久久中文字幕| 成人性生交大片免费看网站| 亚洲精品中文字幕有码专区| 国产精品区在线观看| 岛国av午夜精品| 波多野结衣在线网址| 99久久久国产精品| www.com久久久| 国产美女一区| 黄网站色视频免费观看| 免费av一区| 成人资源av| 四虎成人精品一区二区免费网站| 欧美激情在线一区| 五月婷婷开心中文字幕| 日韩欧美一区二区三区在线| 国产91av在线播放| 精品国产精品自拍| 欧美色图校园春色| 天堂午夜影视日韩欧美一区二区| 在线视频欧美一区| 国产精品探花在线观看| 日本一欧美一欧美一亚洲视频| 二区三区在线观看| 中国人与牲禽动交精品| 亚洲色图 校园春色| 日韩一区二区在线免费观看| 999久久久国产| 91丨porny丨首页| 美女搡bbb又爽又猛又黄www| 紧缚奴在线一区二区三区| 熟女性饥渴一区二区三区| 亚洲国产高清一区二区三区| 91精品视频在线看| 中文字幕av一区二区三区佐山爱| 国语自产精品视频在线看| 91caoporn在线| 国产亚洲免费的视频看| 凸凹人妻人人澡人人添| 精品国产三级电影在线观看| 国产日韩一级片| 欧美日本免费一区二区三区| 中文字幕 视频一区| 在线观看亚洲成人| 无码人妻精品一区二区三区不卡 | 高清久久精品| 国产精品一区二区三区久久久| 三上悠亚激情av一区二区三区| 97久久精品人人澡人人爽缅北| 毛片大全在线观看| 欧美激情视频一区二区| 免费污视频在线| 久久久久久欧美| 福利写真视频网站在线| 久久亚洲精品成人| yourporn在线观看中文站| 亚洲福利在线看| 天堂中文在线观看视频| 亚洲九九九在线观看| 国产女主播在线写真| 亚洲精品影视在线观看| av在线三区| 久久精品国产成人| av电影免费在线观看| 欧美激情影音先锋| 天堂网在线最新版www中文网| 青青草成人在线| 国产蜜臀在线| 日本欧美国产在线| 日韩欧美精品一区二区综合视频| 国产精品一区专区欧美日韩| 国产精品igao视频网网址不卡日韩| 亚洲影视九九影院在线观看| 国产成人精品福利| 久久精品久久精品国产大片| 欧美欧美黄在线二区| 一区二区免费电影| 欧美jjzz| 亚洲 欧美 综合 另类 中字| 美女久久一区| 男生操女生视频在线观看| 国产乱子轮精品视频| 李丽珍裸体午夜理伦片| 久久久91精品国产一区二区三区| 少妇太紧太爽又黄又硬又爽小说| 久久免费精品国产久精品久久久久| 国产视频不卡在线| 一区二区日韩电影| 久久亚洲精品石原莉奈| 欧美精品乱码久久久久久按摩| 欧美一区二区三区黄片| 亚洲深夜福利网站| 麻豆视频在线免费观看| 国模私拍视频一区| 成人毛片免费| 国产精品亚洲不卡a| 欧美91在线|欧美| 91视频国产高清| 妖精视频一区二区三区 | 日韩免费久久| 国产在线观看欧美| 亚洲激情自拍| 中文字幕在线视频精品| 99久久夜色精品国产网站| 青青青视频在线播放| 亚洲国产一区二区视频| 一区二区不卡视频在线观看| 亚洲精品suv精品一区二区| 美女国产在线| 国产成人av在线| 91精品啪在线观看国产手机 | www黄在线观看| 久久青草精品视频免费观看| 国产情侣一区二区三区| 久久精品日产第一区二区三区乱码 | 免费人成网站在线观看欧美高清| 伊人久久久久久久久| 中文欧美字幕免费| 久久久久久久久久免费视频 | 亚洲欧美一区二区三区国产精品| 日韩av在线播放观看| 久久影院电视剧免费观看| 中文字幕五月天| 欧美性猛交视频| 亚洲精品无遮挡| 久久不射电影网| 国精产品一区一区三区四川| 精品久久久久久一区二区里番| 影音先锋成人在线电影| 亚洲国产日韩欧美在线观看| 奇米色777欧美一区二区| 日本女人性视频| 中文字幕一区二区三区不卡| 精品久久免费视频| 日韩欧美a级成人黄色| 国产剧情精品在线| 日韩在线视频网站| 欧美www.| 日本不卡一区| 三级欧美韩日大片在线看| 亚洲一级Av无码毛片久久精品| 亚洲卡通动漫在线| 国产色综合视频| 久久的精品视频| 国产成人精品一区二区三区在线| 日本一区二区三区免费观看| 久久国产日韩| 亚洲人人夜夜澡人人爽| 亚洲成在人线在线播放| 女人18毛片水真多18精品| 久久久这里只有精品视频| 99精品国产九九国产精品| 亚洲乱码一区二区三区三上悠亚| 免费视频一区二区| 老司机精品免费视频| 欧美在线观看视频一区二区| 成人在线免费观看| 国产精品成人品| 国产在线观看91一区二区三区| 99视频精品免费| 黄一区二区三区| 五月天婷婷丁香网| 欧美高清www午色夜在线视频| 黄色视屏免费在线观看| 国产欧美一区二区三区久久| 99精品电影| 免费欧美一级片| 亚洲高清在线视频| 免费a在线观看| 国产美女久久精品香蕉69| 99久久精品费精品国产风间由美| 色综合五月婷婷| 亚洲国产综合人成综合网站| 国 产 黄 色 大 片| 热99精品里视频精品| 成人精品影视| 男生操女生视频在线观看| 亚洲一区影音先锋| 蜜桃av中文字幕| 国产精品久久久久久av福利软件| 欧美r级电影| 中文字幕第66页| 午夜精品久久一牛影视| 国产天堂素人系列在线视频| 国产精品视频26uuu| 亚洲精品小说| 乱码一区二区三区| 欧美日韩国产精品一区二区不卡中文| 日本天堂影院在线视频| 成人免费网站在线观看| 一区在线播放| 亚洲精品成人av久久| 欧美一区二区三区人| 麻豆免费版在线观看| 手机在线观看国产精品| 国产成人精品免费在线| 男人天堂av在线播放| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 欧美午夜精彩| 最新国产黄色网址| 亚洲妇熟xx妇色黄| 日韩动漫一区| 国产亚洲一区二区三区四区|