單鏈表反轉(zhuǎn)

1.就地反轉(zhuǎn)法反轉(zhuǎn)鏈表

就地反轉(zhuǎn)法和頭插法思想類似, 唯一的區(qū)別就是頭插法創(chuàng)建一個(gè)新的鏈表來實(shí)現(xiàn), 而就地反轉(zhuǎn)法是直接修改原鏈表式實(shí)現(xiàn)反轉(zhuǎn)

  1. 初始狀態(tài)下, 令beg 指向第一個(gè)節(jié)點(diǎn), end 指向beg.next, 如圖


    就地反轉(zhuǎn)表的初始狀態(tài)

    2.將end所指的節(jié)點(diǎn)從鏈表上摘除, 然后再天機(jī)到當(dāng)前鏈表的頭部,如圖


    反轉(zhuǎn)節(jié)點(diǎn)2

    3.將end指向下一個(gè)節(jié)點(diǎn),到此已經(jīng)完成接下來重復(fù)上面的操作可完成剩余反轉(zhuǎn), 即將end所指向的節(jié)點(diǎn)3從鏈表摘除, 再添加到鏈表的頭部
    反轉(zhuǎn)節(jié)點(diǎn)3

    4.重復(fù)以上步驟


    反轉(zhuǎn)節(jié)點(diǎn)4

具體代碼實(shí)現(xiàn)(swift)

 func reverseList( head:inout  ListNode?) -> ListNode? {
// 2個(gè)額外的指針, 分別指向節(jié)點(diǎn)1和節(jié)點(diǎn)2
        var beg = head
        var end = head?.next

        // 循環(huán)鏈表
        while end != nil {
             // 假設(shè)  鏈表為1,2,3,4,5
             // 將end從鏈表中移除, 此時(shí)鏈表head 為 1,3,4,5
            beg?.next = end?.next

            // 將head 移動(dòng)到表頭  2,1,3,4,5
            end?.next = head

            //  head 指向新的鏈表, 2,1,3,4,5
            head = end
            
            // 移動(dòng)end執(zhí)行的指向, 即執(zhí)行beg.next 節(jié)點(diǎn), 為下次反轉(zhuǎn)準(zhǔn)備
            end = beg?.next
            
        }
        return head
            
    }

2.頭插法

所謂頭插法,是指在原有鏈表的基礎(chǔ)上舌狗,依次將位于鏈表頭部的節(jié)點(diǎn)摘下朝氓,然后采用從頭部插入的方式生成一個(gè)新鏈表赵哲,則此鏈表即為原鏈表的反轉(zhuǎn)版。

1.創(chuàng)建空鏈表


創(chuàng)建空鏈表

2.從原鏈表中摘除頭部節(jié)點(diǎn) 1,并以頭部插入的方式將該節(jié)點(diǎn)添加到新鏈表中


放置節(jié)點(diǎn)1到新鏈表

3.從原鏈表中摘除頭部節(jié)點(diǎn) 2华嘹,以頭部插入的方式將該節(jié)點(diǎn)添加到新鏈表中


放置節(jié)點(diǎn)2到新鏈表

4.繼續(xù)重復(fù)以上工作,先后將節(jié)點(diǎn) 3俯渤、4 從原鏈表中摘除侦鹏,并以頭部插入的方式添加到新鏈表中


繼續(xù)放置其他節(jié)點(diǎn)

具體代碼實(shí)現(xiàn)(swift)


   func reverseList( head:inout  ListNode?) -> ListNode? {
        // 新鏈表
        var pHead: ListNode? = nil
        // 臨時(shí)鏈表
        var temp: ListNode? = nil
        
        // 下一個(gè)
        while head != nil {
                        
            temp = head
            // 將temp 從head中摘除
            head = head?.next
            
            // temp 插入到new_head頭部
            temp?.next = pHead
            
            pHead = temp
   
            
        }
      
        
        return pHead
            
    }
    

2.應(yīng)用, 尋找兩個(gè)view共同父視圖?

暴力破解, 復(fù)雜度 m*n
思考: view通過調(diào)用superview 能得到父視圖, 其結(jié)構(gòu)跟鏈表類似, 因此可以轉(zhuǎn)化為尋找兩個(gè)鏈表的公共節(jié)點(diǎn)問題

        var temp1 = v1.superview
        var temp2 = v2.superview

        while temp1 != nil{
            
            while(temp2 != nil){
                
                if temp2 == temp1 {
                    
                    print("父視圖相同了")
                }
                temp2 = temp2?.superview
                
            }
            

            temp1 = temp1?.superview
            
        }

尋找兩個(gè)鏈表的公共節(jié)點(diǎn), 算法復(fù)雜度為(m+n)

 func FindFirstCommonNode(pHead1: ListNode?, pHead2: ListNode?)-> ListNode?
    {
        var p: ListNode? = pHead1;
        var q: ListNode? = pHead2;
        while(p != q){
            p = (p != nil) ? p?.next : pHead2;
            q = (q != nil) ? q?.next : pHead1;
            print("p:\(p?.val)  q: \(q?.val)")
        }
        return p;
    }

原文地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末跨释,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子缆娃,更是在濱河造成了極大的恐慌贯要,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跟狱,死亡現(xiàn)場(chǎng)離奇詭異套腹,居然都是意外死亡幢码,警方通過查閱死者的電腦和手機(jī)店雅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門窍奋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纺酸,“玉大人碎紊,你說我怎么就攤上這事∽暮В” “怎么了痴鳄?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)缸夹。 經(jīng)常有香客問我痪寻,道長(zhǎng),這世上最難降的妖魔是什么虽惭? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任橡类,我火速辦了婚禮,結(jié)果婚禮上芽唇,老公的妹妹穿的比我還像新娘顾画。我一直安慰自己,他們只是感情好匆笤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布研侣。 她就那樣靜靜地躺著,像睡著了一般炮捧。 火紅的嫁衣襯著肌膚如雪庶诡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天咆课,我揣著相機(jī)與錄音末誓,去河邊找鬼扯俱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛喇澡,可吹牛的內(nèi)容都是我干的迅栅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼晴玖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼库继!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窜醉,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤宪萄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后榨惰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拜英,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年琅催,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了居凶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡藤抡,死狀恐怖侠碧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缠黍,我是刑警寧澤弄兜,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站瓷式,受9級(jí)特大地震影響替饿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贸典,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一视卢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧廊驼,春花似錦据过、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至饥漫,卻和暖如春榨呆,著一層夾襖步出監(jiān)牢的瞬間罗标,已是汗流浹背庸队。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工积蜻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彻消。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓竿拆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宾尚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丙笋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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