LeetCode專題-鏈表

25. Reverse Nodes in k-Group

Hard

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

Example:

Given this linked list: 1->2->3->4->5

For k = 2, you should return: 2->1->4->3->5

For k = 3, you should return: 3->2->1->4->5

Note:

Only constant extra memory is allowed.
You may not alter the values in the list's nodes, only nodes itself may be changed.

這是反轉(zhuǎn)鏈表系列的終極BOSS,將鏈表按每K個節(jié)點反轉(zhuǎn)忙芒。我們需要維持一個節(jié)點的索引示弓,將每K個節(jié)點作為起始,反轉(zhuǎn)之后的鏈表呵萨。

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverseKGroup(head *ListNode, k int) *ListNode {
    if head == nil || k == 1 {return head}
    dummy := ListNode{Next:head}
    var size int
    //measure the length of list
    for head != nil {
        head = head.Next
        size++
    }
    pre := &dummy
    for seg := 0; seg + k <= size; seg += k {
        cur := pre.Next
        nxt := cur.Next
        for i := 1; i < k; i++ {
            /*
                pre -> cur -> nxt -> nn
                cur -> nn
                nn  -> cur
                nxt  -> cur(pre) - > nn(nxt)
            */
            //swap cur and nxt, put nxt before cur
            cur.Next = nxt.Next 
            nxt.Next = pre.Next //this must be 'pre.Next' rather than 'cur'
            pre.Next = nxt //link new head
            nxt = cur.Next //advance to next
        }
        pre = cur
    }

    return dummy.Next
}

測試一下

Success
[Details]
Runtime: 4 ms, faster than 99.02% of Go online submissions for Reverse Nodes in k-Group.
Memory Usage: 3.6 MB, less than 98.26% of Go online submissions for Reverse Nodes in k-Group.

148. Sort List

Medium

Sort a linked list in O(n log n) time using constant space complexity.

Example 1:

Input: 4->2->1->3
Output: 1->2->3->4

Example 2:

Input: -1->5->3->4->0
Output: -1->0->3->4->5

這道題經(jīng)常見到奏属,其中需要用到很多鏈表的操作方法。

func sortList(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {return head}
    fast, slow := head.Next, head //fast need always ahead of slow
    for fast != nil && fast.Next != nil {
        fast = fast.Next.Next
        slow = slow.Next
    }
    mid := slow.Next
    slow.Next = nil
    return sortListMerge(sortList(head), sortList(mid))
}

func sortListMerge(head1, head2 *ListNode) *ListNode {
    dummy := &ListNode{}
    pre := dummy
    for head1 != nil && head2 != nil {
        if head1.Val <= head2.Val {
            pre.Next = head1
            head1 = head1.Next
        } else {
            pre.Next = head2
            head2 = head2.Next          
        }
        pre = pre.Next
    }

    if head1 != nil {
        pre.Next = head1
    } else if head2 != nil {
        pre.Next = head2
    }
    return dummy.Next
}

測試一下

Success
[Details]
Runtime: 12 ms, faster than 92.86% of Go online submissions for Sort List.
Memory Usage: 5 MB, less than 97.86% of Go online submissions for Sort List.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末潮峦,一起剝皮案震驚了整個濱河市囱皿,隨后出現(xiàn)的幾起案子勇婴,更是在濱河造成了極大的恐慌,老刑警劉巖嘱腥,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕渴,死亡現(xiàn)場離奇詭異,居然都是意外死亡齿兔,警方通過查閱死者的電腦和手機橱脸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來分苇,“玉大人添诉,你說我怎么就攤上這事∫绞伲” “怎么了栏赴?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糟红。 經(jīng)常有香客問我艾帐,道長,這世上最難降的妖魔是什么盆偿? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任柒爸,我火速辦了婚禮,結(jié)果婚禮上事扭,老公的妹妹穿的比我還像新娘捎稚。我一直安慰自己,他們只是感情好求橄,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布今野。 她就那樣靜靜地躺著,像睡著了一般罐农。 火紅的嫁衣襯著肌膚如雪条霜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天涵亏,我揣著相機與錄音宰睡,去河邊找鬼。 笑死气筋,一個胖子當(dāng)著我的面吹牛拆内,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宠默,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼麸恍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了搀矫?” 一聲冷哼從身側(cè)響起抹沪,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤刻肄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后采够,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肄方,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年蹬癌,在試婚紗的時候發(fā)現(xiàn)自己被綠了权她。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡逝薪,死狀恐怖隅要,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情董济,我是刑警寧澤步清,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站虏肾,受9級特大地震影響廓啊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜封豪,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一谴轮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吹埠,春花似錦第步、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至刷袍,卻和暖如春翩隧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呻纹。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工鸽心, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人居暖。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像藤肢,于是被迫代替她去往敵國和親太闺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

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