Mlog8: LeetCode -- 旋轉(zhuǎn)鏈表

2019-10-22

文章目錄:

  1. 題目要求
  2. 解題思路
  3. 具體實現(xiàn)
  4. 改進(jìn)之路
  5. 總結(jié)

1. 題目要求

給定一個鏈表,旋轉(zhuǎn)鏈表,將鏈表每個節(jié)點(diǎn)向右移動 k 個位置,其中 k 是非負(fù)數(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

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

來源:力扣LeetCode
本文僅做個人刷題記錄,不做任何商業(yè)用途踩麦。

2. 解題思路

根據(jù)測試用例枚赡,可以知道:
a. 鏈表反轉(zhuǎn)次數(shù) 和 k 與鏈表長度之間的關(guān)系 有關(guān)聯(lián);
b. 求鏈表長度 length谓谦;length == 0 或 length == k贫橙,鏈表不變;
c. 將鏈表每個節(jié)點(diǎn)向右移動 k 個位置反粥,即 第 i 位置的元素 移到 第 i+k 位置 卢肃,考慮到單鏈表的移動問題,將鏈表頭尾相連轉(zhuǎn)換成循環(huán)鏈表才顿,
old_tail.next = old_head;
d. 找到新的表頭(即 n-k )和表尾( n-n%k-1 )莫湘, new_head = new_tail.next;
e.斷開循環(huán)鏈表,恢復(fù)單鏈表郑气,new_tail.next = null.

3. 具體實現(xiàn)

 public ListNode rotateRight(ListNode head, int k) {
    //界值判斷   
    if(head==null||k==0){
        return head;
    }
    //新建一個鏈表
    ListNode res=head;
    ListNode tail=null;
    int length=1;
    //獲取鏈表長度幅垮,新鏈表賦值
    while(res.next!=null)
    {
        res=res.next;
        length++;
    }
    //得到循環(huán)的次數(shù)
    int loop=length-(k%length);
    //指向尾結(jié)點(diǎn)
    tail=res;
    //連接成循環(huán)鏈表
    res.next=head;
    res=head;
       
    for(int i=0;i<loop;i++){
        res=res.next;
        tail=tail.next;
    }
    //斷開
    tail.next=null;
    return res;
}

4. 改進(jìn)之路

a. 先連接頭和尾,形成環(huán)尾组;
b. 找到新的尾結(jié)點(diǎn)和頭結(jié)點(diǎn)忙芒;
c. 斷開閉環(huán)示弓。

 public ListNode rotateRight(ListNode head, int k) {
    // 界值判斷
    if (head == null) return null;
    if (head.next == null) return head;

    // 連接頭和尾,形成閉環(huán)
    ListNode old_tail = head;
    int n;
    for(n = 1; old_tail.next != null; n++){
        old_tail = old_tail.next;
    }
    // 界值判斷
    if(n == k) return head;
    old_tail.next = head;

    // 新的尾結(jié)點(diǎn) : 第 (n - k % n - 1)個結(jié)點(diǎn)
    // 新的頭結(jié)點(diǎn) : 第 (n - k % n)個結(jié)點(diǎn)
    ListNode new_tail = head;
    for (int i = 0; i < n - k % n - 1; i++){
        new_tail = new_tail.next;
    }
    ListNode new_head = new_tail.next;

    //斷開
    new_tail.next = null;

    return new_head;
  }

5. 總結(jié)

先想清楚測試用例呵萨,確定邊界和邏輯奏属,然后根據(jù)測試用例寫代碼。文中內(nèi)容參考了 leetcode 給出的標(biāo)準(zhǔn)答案甘桑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市歹叮,隨后出現(xiàn)的幾起案子跑杭,更是在濱河造成了極大的恐慌,老刑警劉巖咆耿,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件德谅,死亡現(xiàn)場離奇詭異,居然都是意外死亡萨螺,警方通過查閱死者的電腦和手機(jī)窄做,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慰技,“玉大人椭盏,你說我怎么就攤上這事∥巧蹋” “怎么了掏颊?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艾帐。 經(jīng)常有香客問我乌叶,道長,這世上最難降的妖魔是什么柒爸? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任准浴,我火速辦了婚禮,結(jié)果婚禮上捎稚,老公的妹妹穿的比我還像新娘乐横。我一直安慰自己,他們只是感情好今野,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布晰奖。 她就那樣靜靜地躺著,像睡著了一般腥泥。 火紅的嫁衣襯著肌膚如雪匾南。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天蛔外,我揣著相機(jī)與錄音蛆楞,去河邊找鬼溯乒。 笑死,一個胖子當(dāng)著我的面吹牛豹爹,可吹牛的內(nèi)容都是我干的裆悄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼臂聋,長吁一口氣:“原來是場噩夢啊……” “哼光稼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起孩等,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤艾君,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肄方,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冰垄,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年权她,在試婚紗的時候發(fā)現(xiàn)自己被綠了虹茶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡隅要,死狀恐怖蝴罪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情步清,我是刑警寧澤洲炊,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站尼啡,受9級特大地震影響暂衡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜崖瞭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一狂巢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧书聚,春花似錦唧领、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驯杜,卻和暖如春受啥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工滚局, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留居暖,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓藤肢,卻偏偏與公主長得像太闺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嘁圈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

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