帶return值的遞歸思考

鏈表的算法掸宛,遞歸是一個(gè)很常見(jiàn)的結(jié)題思路死陆,但很容易陷入套娃中,特別是帶返回值的遞歸唧瘾,有時(shí)候就很懵措译,不知道到底返回了什么。這里做了個(gè)簡(jiǎn)單的思考饰序,有所感悟领虹,記一下。

用一個(gè)題目舉例子:

一條非遞減的鏈表求豫,請(qǐng)刪除鏈表中帶重復(fù)值的節(jié)點(diǎn)塌衰,只保留刪減前不重復(fù)的節(jié)點(diǎn)诉稍,返回頭結(jié)點(diǎn)。
如[1 - 2 - 2 - 3] => [1 - 3]

思路

遞歸的實(shí)質(zhì)就是: 向下遍歷, 然后向上回溯. 核心是: 只看當(dāng)前層. 帶返回值的遞歸, 返回值有兩種可能:

  1. 返回的是第一層的返回結(jié)果
  2. 返回的是最后一層的結(jié)果

這里舉例說(shuō)明, 看代碼


當(dāng)調(diào)用函數(shù)的flag為false, 代碼為



當(dāng)調(diào)用函數(shù)的flag為true, 代碼化簡(jiǎn)成


那么這兩種情況如何判斷呢?

  • 看最終return與下層有沒(méi)有關(guān)系
  • 第一種: 只用到了下層, 但下層和返回結(jié)果沒(méi)有直接關(guān)系(即返回的值或引用沒(méi)有與下級(jí)產(chǎn)生直接關(guān)系),
  • 若有關(guān)系(最常見(jiàn)的是return 遞歸函數(shù)名), 那么返回值就是終結(jié)遞歸的那一條語(yǔ)句返回的值(if(i>=5) return i;)

現(xiàn)在再來(lái)看題目

因?yàn)橐祷劓湵眍^結(jié)點(diǎn)head, 顯然是要用第一種方法, 最終返回的第一層就是真實(shí)的頭結(jié)點(diǎn)
那么每一層要做的事情就是: 判斷當(dāng)前層有沒(méi)有相同的多個(gè)節(jié)點(diǎn)

  • 若有: 將當(dāng)前層所有相同節(jié)點(diǎn)全部刪掉, 并返回下一層回溯上來(lái)的結(jié)果(因?yàn)閺?fù)數(shù)個(gè)節(jié)點(diǎn)要全部刪掉)
  • 若沒(méi)有:保留當(dāng)前節(jié)點(diǎn)并返回給上一層


  1. 先構(gòu)建返回條件


  2. 對(duì)當(dāng)前節(jié)點(diǎn)和下一個(gè)節(jié)點(diǎn)進(jìn)行值的判斷, 若相等, 則刪除該節(jié)點(diǎn), 并查看下一個(gè)節(jié)點(diǎn), 直到值不相等


  3. 若不相等, 則需要保留當(dāng)前節(jié)點(diǎn), 并將下一層節(jié)點(diǎn)接在后面. 返回的是當(dāng)前的節(jié)點(diǎn)

    4.若想要?jiǎng)h除重復(fù)節(jié)點(diǎn), 但只刪除到剩下一個(gè), 而不是全部刪除, 怎么辦呢? 顯然從第二步的返回值開(kāi)始下手, 不能直接返回回溯上來(lái)的節(jié)點(diǎn). 而是要拼接一下再返回.
    image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末最疆,一起剝皮案震驚了整個(gè)濱河市杯巨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌努酸,老刑警劉巖服爷,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蚊逢,居然都是意外死亡层扶,警方通過(guò)查閱死者的電腦和手機(jī)箫章,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)烙荷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人檬寂,你說(shuō)我怎么就攤上這事终抽。” “怎么了桶至?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵昼伴,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我镣屹,道長(zhǎng)圃郊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任女蜈,我火速辦了婚禮持舆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伪窖。我一直安慰自己逸寓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布覆山。 她就那樣靜靜地躺著竹伸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪簇宽。 梳的紋絲不亂的頭發(fā)上勋篓,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音魏割,去河邊找鬼譬嚣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛见妒,可吹牛的內(nèi)容都是我干的孤荣。 我是一名探鬼主播甸陌,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盐股!你這毒婦竟也來(lái)了钱豁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疯汁,失蹤者是張志新(化名)和其女友劉穎牲尺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體幌蚊,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谤碳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溢豆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜒简。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漩仙,靈堂內(nèi)的尸體忽然破棺而出搓茬,到底是詐尸還是另有隱情,我是刑警寧澤队他,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布卷仑,位于F島的核電站,受9級(jí)特大地震影響麸折,放射性物質(zhì)發(fā)生泄漏锡凝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一垢啼、第九天 我趴在偏房一處隱蔽的房頂上張望窜锯。 院中可真熱鬧,春花似錦膊夹、人聲如沸衬浑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)工秩。三九已至,卻和暖如春进统,著一層夾襖步出監(jiān)牢的瞬間助币,已是汗流浹背来屠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工瘸味, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拐格。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓掉分,卻偏偏與公主長(zhǎng)得像俭缓,于是被迫代替她去往敵國(guó)和親克伊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 1.鏈表 1.實(shí)現(xiàn)一個(gè)單向鏈表 2.找出鏈表相交節(jié)點(diǎn)华坦,假設(shè)均沒(méi)有環(huán) 3.判斷鏈表是否有環(huán)思路:使用快慢兩個(gè)指針愿吹,當(dāng)...
    X1028閱讀 656評(píng)論 0 0
  • 算法思想貪心思想雙指針排序快速選擇堆排序桶排序荷蘭國(guó)旗問(wèn)題二分查找搜索BFSDFSBacktracking分治動(dòng)態(tài)...
    第六象限閱讀 3,065評(píng)論 0 0
  • ● 如何打印二叉樹(shù)每層的節(jié)點(diǎn)? 考察點(diǎn):二叉樹(shù) 參考回答: 實(shí)現(xiàn)代碼: import java.util.Arra...
    le_u閱讀 475評(píng)論 0 0
  • 遞歸 一棵樹(shù)要么是空樹(shù)惜姐,要么有兩個(gè)指針犁跪,每個(gè)指針指向一棵樹(shù)。樹(shù)是一種遞歸結(jié)構(gòu)歹袁,很多樹(shù)的問(wèn)題可以使用遞歸來(lái)處理坷衍。 1...
    奔向星辰大海閱讀 796評(píng)論 0 0
  • 黑色的海島上懸著一輪又大又圓的明月枫耳,毫不嫌棄地把溫柔的月色照在這寸草不生的小島上。一個(gè)少年白衣白發(fā)逞刷,悠閑自如地倚坐...
    小水Vivian閱讀 3,102評(píng)論 1 5