初級(jí)算法-鏈表-反轉(zhuǎn)鏈表

給你單鏈表的頭節(jié)點(diǎn) head ,請(qǐng)你反轉(zhuǎn)鏈表炊汹,并返回反轉(zhuǎn)后的鏈表篡撵。
反轉(zhuǎn)鏈表示例.jpg
進(jìn)階:鏈表可以選用迭代或遞歸方式完成反轉(zhuǎn)。你能否用兩種方法解決這道題坷澡?
摘一個(gè)示例做個(gè)說(shuō)明.
示例 1:
輸入:head = [1,2,3,4,5]
輸出:[5,4,3,2,1]
條件分析:
  1. 單鏈表頭節(jié)點(diǎn) -> 需要從頭節(jié)點(diǎn)開(kāi)始反轉(zhuǎn)
解決思路1:
  1. 根據(jù)分析1,采用迭代方式進(jìn)行反轉(zhuǎn)
先定義返回的空鏈表和循環(huán)鏈表(需要反轉(zhuǎn)的鏈表).然后當(dāng)循環(huán)鏈表不空的時(shí)候進(jìn)行循環(huán)(即鏈表沒(méi)有到尾節(jié)點(diǎn)),定義臨時(shí)變量為循環(huán)鏈表的next,然后讓循環(huán)鏈表的next指向返回鏈表.返回的鏈表為循環(huán)鏈表.然后循環(huán)鏈表為臨時(shí)鏈表(即下一個(gè)節(jié)點(diǎn)后的鏈表)
func reverseList(_ head: ListNode?) -> ListNode? {
    // 返回鏈表
    var newHead: ListNode? = nil
    // 循環(huán)節(jié)點(diǎn)
    var old = head
    while old != nil {
        // 先定義臨時(shí)變量存儲(chǔ)next
        let tmp = old?.next
        // 節(jié)點(diǎn)指向返回鏈表(定義新鏈表承接)
        old?.next = newHead
        // 返回鏈表等于循環(huán)鏈表
        newHead = old
        // 讓循環(huán)鏈表為臨時(shí)變量,進(jìn)行繼續(xù)循環(huán)
        old = tmp
    }
    
    return newHead
}
解決思路2:
  1. 根據(jù)分析1,采用遞歸方式進(jìn)行反轉(zhuǎn)
先判斷鏈表是否為空或者單節(jié)點(diǎn)鏈表,是則直接返回(也用以結(jié)束遞歸).然后開(kāi)始遞歸節(jié)點(diǎn),直到尾節(jié)點(diǎn)結(jié)束遞歸.然后從尾部開(kāi)始反轉(zhuǎn)鏈表節(jié)點(diǎn).直到頭節(jié)點(diǎn).然后置空頭節(jié)點(diǎn)的next即可.
func reverseList(_ head: ListNode?) -> ListNode? {
    // 單鏈表和空鏈表直接返回
    if head == nil || head?.next == nil{
        return head
    }
    // 遞歸調(diào)用,直到尾節(jié)點(diǎn)
    let node : ListNode? = reverseList(head?.next)
    // 直接反轉(zhuǎn)鏈表節(jié)點(diǎn)指向
    head?.next?.next = head
    // 最后next置空
    head?.next = nil
    return node
}

測(cè)試用例:

let endNode = ListNode.init(0)
let fourNode = ListNode.init(1)
fourNode.next = endNode
let threeNode = ListNode.init(2)
threeNode.next = fourNode
let secondNode = ListNode.init(3)
secondNode.next = threeNode
let firstNode = ListNode.init(4)
firstNode.next = secondNode
let headNode = ListNode.init(5)
headNode.next = firstNode

考察要點(diǎn):

  • 遞歸
  • 鏈表
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末托呕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子频敛,更是在濱河造成了極大的恐慌项郊,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斟赚,死亡現(xiàn)場(chǎng)離奇詭異着降,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拗军,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)任洞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蓄喇,“玉大人,你說(shuō)我怎么就攤上這事交掏∽逼” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵耀销,是天一觀的道長(zhǎng)楼眷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)熊尉,這世上最難降的妖魔是什么罐柳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮狰住,結(jié)果婚禮上张吉,老公的妹妹穿的比我還像新娘。我一直安慰自己催植,他們只是感情好肮蛹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著创南,像睡著了一般伦忠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稿辙,一...
    開(kāi)封第一講書(shū)人閱讀 52,196評(píng)論 1 308
  • 那天昆码,我揣著相機(jī)與錄音,去河邊找鬼邻储。 笑死赋咽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吨娜。 我是一名探鬼主播脓匿,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宦赠!你這毒婦竟也來(lái)了陪毡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勾扭,失蹤者是張志新(化名)和其女友劉穎缤骨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體尺借,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绊起,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了燎斩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虱歪。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜂绎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笋鄙,到底是詐尸還是另有隱情师枣,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布萧落,位于F島的核電站践美,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏找岖。R本人自食惡果不足惜陨倡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望许布。 院中可真熱鬧兴革,春花似錦、人聲如沸蜜唾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)袁余。三九已至擎勘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颖榜,已是汗流浹背棚饵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朱转,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓积暖,卻偏偏與公主長(zhǎng)得像藤为,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夺刑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

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

  • 給你一個(gè)鏈表缅疟,刪除鏈表的倒數(shù)第 n 個(gè)結(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)遍愿。 提示: 鏈表中結(jié)點(diǎn)的數(shù)目為 sz1 <= sz...
    coenen閱讀 7,025評(píng)論 0 2
  • 線性表 定義:線性表就是數(shù)據(jù)排成像一條線一樣的結(jié)構(gòu)。每個(gè)線性表上的數(shù)據(jù)最多只有前和后兩個(gè)方向坞笙。其實(shí)除了數(shù)組岩饼,鏈表荚虚、...
    竹blue閱讀 324評(píng)論 0 0
  • 動(dòng)態(tài)數(shù)組存在明顯的缺點(diǎn):首先動(dòng)態(tài)擴(kuò)容可能會(huì)造成內(nèi)存空間的大量浪費(fèi);使用鏈表這種數(shù)據(jù)結(jié)構(gòu)就可以辦到籍茧,使用多少內(nèi)存版述,就...
    YanZi_33閱讀 291評(píng)論 0 0
  • ● 如何打印二叉樹(shù)每層的節(jié)點(diǎn)? 考察點(diǎn):二叉樹(shù) 參考回答: 實(shí)現(xiàn)代碼: import java.util.Arra...
    le_u閱讀 485評(píng)論 0 0
  • 鏈表和數(shù)組的區(qū)別 數(shù)組需要一塊連續(xù)的內(nèi)存空間來(lái)存儲(chǔ),對(duì)內(nèi)存要求比較高鏈表通過(guò)指針吮龄,將一組零散的內(nèi)存塊串聯(lián)起來(lái)使用 ...
    碼代碼的小馬閱讀 1,827評(píng)論 0 2