Leetcode 061 旋轉(zhuǎn)鏈表 python (多解法)

AC

題目描述:

給定一個鏈表仅讽,旋轉(zhuǎn)鏈表陶缺,將鏈表每個節(jié)點向右移動 k 個位置,其中 k 是非負數(shù)洁灵。

示例 1:

輸入: 1->2->3->4->5->NULL, k = 2
輸出: 4->5->1->2->3->NULL
解釋:
向右旋轉(zhuǎn) 1 步: 5->1->2->3->4->NULL
向右旋轉(zhuǎn) 2 步: 4->5->1->2->3->NULL

示例 2:

輸入: 0->1->2->NULL, k = 4
輸出:
2->0->1->NULL

解釋:
向右旋轉(zhuǎn) 1 步: 2->0->1->NULL
向右旋轉(zhuǎn) 2 步: 1->2->0->NULL
向右旋轉(zhuǎn) 3 步:
0->1->2->NULL

向右旋轉(zhuǎn) 4 步:
2->0->1->NULL

算法過程:

思路一:繞圈法饱岸。

觀察示例可知,所謂翻轉(zhuǎn)這個鏈表徽千,無非就是把后幾個節(jié)點挪到前面罷了苫费。容易聯(lián)想到不過是形成1個圓,然后把新的頭返回即可

1)數(shù)節(jié)點個數(shù)

2)連接首尾節(jié)點

3)運動到新的頭部節(jié)點的上一位双抽,斷開鏈表

4)返回新的頭部節(jié)點

代碼:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
 
class Solution:
    def rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        dummy = ListNode(0)
        dummy.next = head
        if head is None:
            return None
        
        #先數(shù)鏈表有幾個節(jié)點
        i = head
        count = 1
        while i.next is not None:
            i = i.next
            count += 1
        #拋掉重復的轉(zhuǎn)圈,也算一種算法優(yōu)化吧
        k = k%count
        if (k == 0) or count == 1:
            return head
        #把鏈表頭尾連起來
        i.next = head
 
        #從dummy開始運動
        i = dummy
        #運動到新的鏈表的頭的上一個節(jié)點
        for _ in range(count - k):
            i = i.next
 
        j = i.next
        i.next = None
        return j

思路二:快慢指針

算法過程

1)定義2個指針百框,一快一慢

2)快的先走k步,慢的不動

3)接著快慢一起動牍汹,當快的走到節(jié)點的時候铐维,慢的的下一項就是新的頭部節(jié)點。

算法證明:

由過程可知慎菲,快的永遠比慢的快k步嫁蛇,所以當快的指針到尾部節(jié)點時,慢的指針距它還有k步遠露该。這時候我們從這里斷開鏈表睬棚,則能保證后k個節(jié)點移到前面來

代碼:

class Solution(object):
    
    def rotateRight(self, head, k):
        if not head or not head.next or k==0:
            return head
        ListLen = 0
        p = head
        #數(shù)有幾個節(jié)點
        while(p):
            ListLen+=1
            p = p.next
            
        #優(yōu)化
        k = k%ListLen
        if k==0:
            return head
        
        #快節(jié)點先走k步
        p = head
        while(k>0):
            k -=1
            p = p.next
        slow = head
        fast = p
        #接著讓fast走到最后一個節(jié)點,slow與它有著同樣的速度
        while fast.next:
            slow = slow.next
            fast = fast.next
        
        #把頭尾連起來然后斷開鏈表
        new_head = slow.next 
        fast.next = head
        slow.next = None
        return new_head

總結(jié):快慢指針解幼,可以達到錯位運動的效果抑党,有時能制造很多trick魔法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撵摆,一起剝皮案震驚了整個濱河市底靠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌台汇,老刑警劉巖苛骨,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苟呐,居然都是意外死亡痒芝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門牵素,熙熙樓的掌柜王于貴愁眉苦臉地迎上來严衬,“玉大人,你說我怎么就攤上這事笆呆∏肓眨” “怎么了粱挡?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長俄精。 經(jīng)常有香客問我陵霉,道長道逗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮憋沿,結(jié)果婚禮上赃承,老公的妹妹穿的比我還像新娘摘悴。我一直安慰自己惹谐,他們只是感情好,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布砍的。 她就那樣靜靜地躺著痹筛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廓鞠。 梳的紋絲不亂的頭發(fā)上帚稠,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機與錄音诫惭,去河邊找鬼翁锡。 笑死蔓挖,一個胖子當著我的面吹牛夕土,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瘟判,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼怨绣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拷获?” 一聲冷哼從身側(cè)響起篮撑,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匆瓜,沒想到半個月后赢笨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡驮吱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年茧妒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片左冬。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡桐筏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拇砰,到底是詐尸還是另有隱情梅忌,我是刑警寧澤狰腌,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站牧氮,受9級特大地震影響琼腔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踱葛,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一展姐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剖毯,春花似錦圾笨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胶滋,卻和暖如春板鬓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背究恤。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工俭令, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人部宿。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓抄腔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親理张。 傳聞我的和親對象是個殘疾皇子赫蛇,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

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

  • 搞懂單鏈表常見面試題 Hello 繼上次的 搞懂基本排序算法,這個一星期雾叭,我總結(jié)了悟耘,我所學習和思考的單鏈表基礎知識...
    醒著的碼者閱讀 4,579評論 1 45
  • (一)LeetCode206.反轉(zhuǎn)鏈表 題目描述: 反轉(zhuǎn)一個單鏈表。 代碼實現(xiàn) (二)LeetCode160. 相...
    Jarily閱讀 1,404評論 0 5
  • 知識點總結(jié) 1织狐、鏈表問題只要涉及到頭結(jié)點的操作的暂幼,一般都會用到設置虛擬頭結(jié)點這個技巧; 2移迫、鏈表中的問題旺嬉,很多可以...
    李威威閱讀 718評論 0 0
  • 題目鏈接難度: 中等 類型:鏈表 給定一個鏈表,旋轉(zhuǎn)鏈表起意,將鏈表每個節(jié)點向右移動 k 個位置鹰服,其...
    wzNote閱讀 3,278評論 0 0
  • 小麗和史蒂夫在散步的時候遇到了一個乞丐。但是這個乞丐也太過奇葩了,怎么個奇葩法呢悲酷?請看下面: 他們看了乞丐的為什么...
    Soviet蘇維埃閱讀 393評論 13 3