25. k個(gè)一組翻轉(zhuǎn)鏈表(Swift版)

一媚媒、題目

給出一個(gè)鏈表,每 k 個(gè)節(jié)點(diǎn)一組進(jìn)行翻轉(zhuǎn)涩僻,并返回翻轉(zhuǎn)后的鏈表。

k 是一個(gè)正整數(shù)逆日,它的值小于或等于鏈表的長(zhǎng)度嵌巷。如果節(jié)點(diǎn)總數(shù)不是 k 的整數(shù)倍,那么將最后剩余節(jié)點(diǎn)保持原有順序室抽。

示例 :

給定這個(gè)鏈表:1->2->3->4->5

當(dāng) k = 2 時(shí)搪哪,應(yīng)當(dāng)返回: 2->1->4->3->5

當(dāng) k = 3 時(shí),應(yīng)當(dāng)返回: 3->2->1->4->5

說明 :
你的算法只能使用常數(shù)的額外空間坪圾。
你不能只是單純的改變節(jié)點(diǎn)內(nèi)部的值晓折,而是需要實(shí)際的進(jìn)行節(jié)點(diǎn)交換惑朦。

二、解題

創(chuàng)建四個(gè)指針漓概,分別為p=head和q=head?.next行嗤,p的k個(gè)節(jié)點(diǎn)的尾部pTail=nil,q的頭部qHead=head垛耳。
使用while遍歷鏈表,同時(shí)使用i計(jì)數(shù),移動(dòng)指針q栅屏,將q移動(dòng)到p的頭部。當(dāng)i==k時(shí)堂鲜,如果pTail不為空栈雳,將將p添加到pTail后面,同時(shí)記錄當(dāng)前的p的尾部pTail和q的頭部qHead缔莲。并將p和q向后移動(dòng)到下一組節(jié)點(diǎn)哥纫。之后需要處理一個(gè)額外情況,當(dāng)剩下的節(jié)點(diǎn)不足k個(gè)時(shí)痴奏,需要將之后的節(jié)點(diǎn)在翻轉(zhuǎn)會(huì)原樣蛀骇。
時(shí)間復(fù)雜度為O(n)。


步驟

三读拆、代碼實(shí)現(xiàn)

    class Solution {
        func reverseKGroup(_ head: ListNode?, _ k: Int) -> ListNode? {
            if head == nil || k == 0{
                return head;
            }
            var result: ListNode? = nil;
            var preTail: ListNode? = nil;
            var currentTail: ListNode? = head;
            
            var p,q,r: ListNode?
            p = head
            q = head?.next;
            p?.next = nil
            var i = 1
            while q != nil {
                r = q?.next;
                q?.next = p;
                p = q
                q = r
                i += 1
                if i == k {
                    if result == nil {
                        result = p
                    }
                    
                    if preTail != nil {
                        preTail?.next = p;
                    }
                    preTail = currentTail;
                    currentTail = q
                    
                    if q != nil {
                        p = q;
                        q = q?.next;
                    }
                    currentTail?.next = nil;
                    i = 1
                }
            }
            if currentTail != nil {
                q = p?.next
                p?.next = nil
                while q != nil {
                    r = q?.next
                    q?.next = p;
                    p = q;
                    q = r;
                }
                preTail?.next = currentTail
            }
            if result == nil {
                result = p
            }
            return result
        }
    }

Demo地址:github

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末擅憔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子檐晕,更是在濱河造成了極大的恐慌暑诸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辟灰,死亡現(xiàn)場(chǎng)離奇詭異个榕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芥喇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門西采,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人继控,你說我怎么就攤上這事械馆。” “怎么了湿诊?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵狱杰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我厅须,道長(zhǎng),這世上最難降的妖魔是什么食棕? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任朗和,我火速辦了婚禮错沽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘眶拉。我一直安慰自己千埃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布忆植。 她就那樣靜靜地躺著放可,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朝刊。 梳的紋絲不亂的頭發(fā)上耀里,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音拾氓,去河邊找鬼冯挎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咙鞍,可吹牛的內(nèi)容都是我干的房官。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼续滋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼翰守!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疲酌,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤潦俺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后徐勃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體事示,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年僻肖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肖爵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡臀脏,死狀恐怖劝堪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揉稚,我是刑警寧澤秒啦,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站搀玖,受9級(jí)特大地震影響余境,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一芳来、第九天 我趴在偏房一處隱蔽的房頂上張望含末。 院中可真熱鬧,春花似錦即舌、人聲如沸佣盒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肥惭。三九已至,卻和暖如春紊搪,著一層夾襖步出監(jiān)牢的瞬間蜜葱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工嗦明, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笼沥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓娶牌,卻偏偏與公主長(zhǎng)得像奔浅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诗良,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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

  • 搞懂單鏈表常見面試題 Hello 繼上次的 搞懂基本排序算法汹桦,這個(gè)一星期,我總結(jié)了鉴裹,我所學(xué)習(xí)和思考的單鏈表基礎(chǔ)知識(shí)...
    醒著的碼者閱讀 4,587評(píng)論 1 45
  • 1.把二元查找樹轉(zhuǎn)變成排序的雙向鏈表 題目: 輸入一棵二元查找樹舞骆,將該二元查找樹轉(zhuǎn)換成一個(gè)排序的雙向鏈表。 要求不...
    曲終人散Li閱讀 3,314評(píng)論 0 19
  • 春天匆匆快走了径荔,今天畫了一幅春天的畫?督禽,是一個(gè)視頻哦,希望你也可以拿起畫筆一起畫起來总处。 下班后狈惫,畫完畫真的可以放松...
    妮紙同學(xué)閱讀 683評(píng)論 2 1
  • 原創(chuàng)作者:戴德文荸频。版權(quán)所有菱肖,轉(zhuǎn)載時(shí)請(qǐng)注明作者及原文出處。 昨天旭从,結(jié)束了十多天的春節(jié)長(zhǎng)假稳强,我“擠”上了返程的火車场仲。在...
    影像派閱讀 721評(píng)論 5 2
  • 你說:“我快要簽約了!”真的為你感到好開心凹ぁ燎窘!一個(gè)喜愛古風(fēng)的姑娘摹闽,喜歡讀小說蹄咖,現(xiàn)在又喜歡寫小說的姑娘。讀了你的文章...
    栗墨閱讀 621評(píng)論 0 1