精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

粉嫩av一区二区三区免费野| 成人永久aaa| 国产亚洲精品91在线| 日本激情综合网| 午夜视频在线免费观看| 国产一区二区不卡| 亚洲**2019国产| 天天操天天舔天天射| 国产欧美日韩电影| 欧美日韩在线影院| 伊人av成人| 五月婷婷六月激情| 美女在线视频一区| 午夜精品久久久久久久男人的天堂 | 成人欧美一区二区三区在线观看| 欧美在线观看不卡| 99精品美女| 国产午夜精品久久久| 中文字幕中文在线| 在线手机中文字幕| 亚洲激情网站免费观看| 婷婷四房综合激情五月| 蜜桃视频在线观看www| 日本视频免费一区| 91av在线播放| 免费在线观看黄色av| 欧美日韩一区二区综合| 欧美一区三区四区| 国产三级三级看三级| 伊人网在线播放| 一二三四社区欧美黄| 一区二区三区国产福利| 色吊丝在线永久观看最新版本| 国内精品视频666| 国产成人aa精品一区在线播放| 久久97人妻无码一区二区三区| 色呦哟—国产精品| 亚洲性xxxx| 人妻无码一区二区三区| 成人av动漫| 欧美一区二区黄| 久久精品视频在线观看免费| 亚洲承认视频| 欧美性xxxx极品hd满灌| 久久综合久久网| 免费在线国产视频| 亚洲精品免费在线播放| 亚洲小说欧美另类激情| 婷婷五月在线视频| 国产精品久久久一区麻豆最新章节| 欧美成人dvd在线视频| 三级网站在线看| www.欧美日韩| 精品国产福利| 三级在线视频| wwwwww.欧美系列| 精品日本一区二区| 亚洲人妻一区二区三区| 97精品电影院| 欧美成人dvd在线视频| 四虎影视精品成人| 久久久五月婷婷| 欧美日韩国产综合视频在线| 理论视频在线| 国产女主播一区| 亚洲精品欧美精品| 麻豆系列在线观看| 亚洲精品自拍动漫在线| 国产一区二区三区在线免费| 国产精品探花在线| 大伊人狠狠躁夜夜躁av一区| 一本大道熟女人妻中文字幕在线 | 一级日本不卡的影视| 免费看黄色a级片| 日本高清成人vr专区| 亚洲国产美女搞黄色| 无码aⅴ精品一区二区三区浪潮| 亚洲欧洲美洲av| 欧美亚洲图片小说| 樱花草www在线| 国产精品久久久网站| 日韩精品一区二区视频| 九九九视频在线观看| 中文字幕一区二区三三| 国模极品一区二区三区| 9i精品福利一区二区三区| 日本在线观看不卡视频| 亚洲va欧美va国产综合久久| 欧美自拍偷拍一区二区| 久久久久久久久蜜桃| 伊人久久99| 欧美aa一级| 欧美人动与zoxxxx乱| 国产伦理在线观看| 欧美猛男男男激情videos| 色吧影院999| 国产真实乱人偷精品视频| 久久婷婷久久| av成人免费观看| 国产高清一区在线观看| 亚洲码国产岛国毛片在线| av免费观看网| 亚洲综合资源| 亚洲免费电影一区| 日韩高清dvd碟片| 久久国产直播| 99视频在线免费观看| 激情在线视频| 亚洲va韩国va欧美va精品| 美女在线视频一区二区| 久久久亚洲欧洲日产| 最近中文字幕日韩精品| 日韩无码精品一区二区三区| 另类小说综合欧美亚洲| 久久精品aaaaaa毛片| caoporn97在线视频| 日本国产一区二区| 亚洲成年人av| 亚洲精品一区二区在线看| 青青久久aⅴ北条麻妃| 国产免费的av| 国产精品区一区二区三区| 欧美国产激情视频| 日韩欧美另类中文字幕| 在线播放国产一区二区三区| 日韩欧美不卡视频| 国产精品一卡二| 亚洲精品人成| 91成人在线| 亚洲免费av网址| 中文字幕亚洲精品一区| 国产大片一区二区| 女同性恋一区二区| 久久福利在线| 在线观看亚洲视频| 无码人妻精品一区二区三区不卡 | 日本韩国精品在线| 亚洲制服丝袜在线播放| 欧美网站在线| 999热视频| av在线导航| 91精品国产综合久久久久久久| 亚洲第一综合网| 久久人人97超碰国产公开结果| 久久精品欧美| 国产福利片在线观看| 精品盗摄一区二区三区| 免费在线观看黄视频| 国产福利一区二区三区在线视频| 黄色污污在线观看| 日韩一级特黄| 久久国产精品免费视频| 国产农村妇女毛片精品| 亚洲精品亚洲人成人网在线播放| 天堂网成人在线| 午夜国产精品视频| 岛国视频一区免费观看| 美女写真理伦片在线看| 欧美日韩在线观看一区二区| 欧洲美熟女乱又伦| 免费一级片91| www.午夜色| 精品一区二区三区在线观看视频| 欧美成年人视频| 成人午夜精品福利免费| 亚洲电影一级黄| 波多野结衣 在线| 日本视频一区二区三区| 国产av第一区| 成人看片爽爽爽| 97视频免费看| 国产三级在线观看| 欧美日韩国产首页| 超碰在线国产97| 成人丝袜视频网| 精品一区二区中文字幕| 久久国产综合| av一区二区三区免费| 久久男人天堂| 色爱精品视频一区| 国产又粗又猛又黄又爽| 亚洲国产综合在线| 精品国产av无码| 美洲天堂一区二卡三卡四卡视频| 国产av不卡一区二区| 加勒比色老久久爱综合网| 青青草精品毛片| 老司机午夜在线| 精品福利一二区| 蜜臀尤物一区二区三区直播| 国产精品护士白丝一区av| 亚洲妇女无套内射精| 亚洲欧美成人| 免费在线精品视频| 欧美男人操女人视频| 国产精品香蕉在线观看| 中文字幕免费高清电视剧网站在线观看| 精品久久久久久亚洲综合网| 夜夜爽妓女8888视频免费观看| 亚洲欧洲综合另类在线| 亚洲国产欧美视频| 国产一区在线不卡| 亚洲爆乳无码专区| 亚洲国产日韩欧美在线| 裸模一区二区三区免费| 国产亚洲高清一区| 秋霞成人午夜鲁丝一区二区三区| 日本天堂在线观看| 亚洲美女激情视频| 不卡视频免费在线观看| 欧美三级日韩在线| 日韩精品――中文字幕| 中文字幕在线不卡一区| 蜜桃精品成人影片| 国产精品正在播放| www.涩涩涩| 国产精品久久国产愉拍| 久久视频免费在线| 精品一级毛片| 精品久久久久久中文字幕动漫| 色综合视频一区二区三区日韩| 欧美一级免费看| 欧美aaa免费| www.亚洲成人| 最近高清中文在线字幕在线观看| 亚洲国产一区二区三区四区| 97人妻精品一区二区三区软件 | 日韩av新片网| 欧美一区二区三区久久精品茉莉花| 青娱乐国产91| 天堂av一区二区三区在线播放| 91文字幕巨乱亚洲香蕉| 国产精品美女午夜爽爽| 国产成人精品综合| 亚洲私拍视频| 日本中文字幕不卡免费| 97久久人人超碰caoprom| 不卡av在线播放| 日本高清视频在线播放| 亚洲性日韩精品一区二区| 日韩一区二区三区中文字幕| 亚洲激情视频在线播放| 风流少妇一区二区三区91| 欧美一区二区私人影院日本| 国产又大又黄又爽| 欧美日本在线看| 一级爱爱免费视频| 欧美日韩精品一区二区三区蜜桃 | 色呦呦在线免费观看| 久久国产视频网站| a篇片在线观看网站| 欧美精品免费在线| 黄色在线观看网站| 久久久999精品视频| www视频在线看| 久久av红桃一区二区小说| 成年人黄视频在线观看| 久久天天躁夜夜躁狠狠躁2022| 国产调教视频在线观看| 久久99精品国产99久久6尤物| a级片国产精品自在拍在线播放| 久久成人av网站| 牛牛精品视频在线| 91av视频在线播放| 日韩欧美一区二区三区在线观看| 国产精品www色诱视频| www.一区| 91视频免费进入| 久久97精品| 欧美日韩亚洲一区二区三区在线观看| 九九久久成人| 亚洲在线欧美| 欧美国产三级| 免费国产黄色网址| 日韩中文字幕91| 91精品国产三级| 成人午夜在线播放| 久久中文字幕人妻| 国产农村妇女毛片精品久久麻豆| 蜜桃视频最新网址| 一区二区视频在线看| 国产乡下妇女做爰毛片| 色婷婷亚洲综合| 国产精品亚洲欧美在线播放| 欧美v国产在线一区二区三区| 神马久久久久久久久久| 亚洲图片在线综合| 中文在线观看免费| 97在线看福利| 欧美综合影院| 国内外成人免费视频| 日本不卡高清| 免费在线看黄色片| 久久永久免费| 一级全黄裸体片| 国产片一区二区| 九九热视频精品| 色婷婷精品大在线视频| 国产后入清纯学生妹| 亚洲男人天堂2024| 超碰电影在线播放| 欧美一级大胆视频| 91精品一区| 欧美资源一区| 国自产拍偷拍福利精品免费一| 欧美性猛交久久久乱大交小说 | www 日韩| 午夜精品久久久久久99热| 99久久久国产精品免费调教网站| 99久久99久久| 日韩精品四区| 少妇高潮喷水久久久久久久久久| 国产一区视频在线看| 中文字字幕码一二三区| 亚洲另类在线制服丝袜| 国产九色91回来了| 亚洲精品av在线| 制服丝袜在线播放| 国产精品亚洲网站| 欧美变态网站| 91免费国产精品| 另类小说综合欧美亚洲| 欧美18—19性高清hd4k| 亚洲国产你懂的| 性猛交xxxx乱大交孕妇印度| 在线性视频日韩欧美| 制服丝袜专区在线| 国产精品青青草| 欧美激情1区2区3区| 亚洲怡红院在线| 欧美国产禁国产网站cc| www.国产色| 亚洲精品第一国产综合精品| 免费影视亚洲| 亚洲qvod图片区电影| 91亚洲一区| 911福利视频| 国产精品欧美经典| 亚洲成人av网址| 亚洲欧美中文日韩在线| 电影网一区二区| 九九九九精品| 亚洲狼人精品一区二区三区| 香蕉久久久久久av成人| 亚洲欧美日韩国产手机在线| 91精品人妻一区二区三区果冻| 亚洲人成电影在线| 国产超碰精品| 欧美午夜欧美| 日韩中文字幕1| 黄色片网站在线播放| 欧美少妇性性性| 日本激情在线观看| 亚洲影院色无极综合| 欧美激情综合| 美女扒开腿免费视频| 亚洲电影中文字幕在线观看| 日韩一级中文字幕| 7777kkkk成人观看| 亚洲激情播播| www.欧美精品一二三区| 国产精品无码无卡无需播放器| 亚洲妇熟xx妇色黄| 国产91久久久| 91国产视频在线播放| 日韩精品福利一区二区三区| 男女午夜激情视频| 中文字幕国产精品一区二区| 亚洲一级黄色大片| 欧美成人中文字幕在线| 高潮按摩久久久久久av免费| 国产资源在线视频| 国产性做久久久久久| 亚洲精品一区二区二区| 久久综合免费视频影院| 2023国产精华国产精品| 国产精品50p| 国产婷婷一区二区| 91极品身材尤物theporn| 欧美国产第二页| 九一国产精品| 日韩av片免费观看| 午夜精品久久久久久久99水蜜桃| 日韩a在线观看| 成人午夜黄色影院| 极品尤物久久久av免费看| 亚洲精品国产熟女久久久| 欧美日韩国产一级| 欧美videossex| 日本不卡高清视频一区| 精一区二区三区| 欧美成人aaaaⅴ片在线看| 亚洲午夜色婷婷在线| 91成人噜噜噜在线播放| 欧美日韩在线视频一区二区三区| 中文字幕一区二区三区不卡 | 337p日本欧洲亚洲大胆色噜噜| 厕沟全景美女厕沟精品| 亚洲小视频在线播放| 93久久精品日日躁夜夜躁欧美|