LeetCode題解:328.奇偶鏈表

奇偶鏈表

一、LeetCode題解

瞧一瞧~

二、算法題

題目

給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裏的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。

請嘗試使用原地算法完成。你的算法的空間複雜度應爲 O(1),時間複雜度應爲 O(n),n 爲節點總數。

示例 1:

輸入: 1->2->3->4->5->NULL
輸出: 1->3->5->2->4->NULL

示例 2:

輸入: 2->1->3->5->6->4->7->NULL 
輸出: 2->3->6->7->1->5->4->NULL

說明:

應當保持奇數節點和偶數節點的相對順序。
鏈表的第一個節點視爲奇數節點,第二個節點視爲偶數節點,以此類推。

解法一(雙指針)

思路
  • 定義三個指針,分別記錄奇數鏈表、偶數鏈表、偶數鏈表的head節點
  • 記錄奇偶鏈表,最後將偶數鏈表接到奇數鏈表的尾端
    • 奇數鏈表節點 = 偶數鏈表最新節點的下一個
    • 偶數鏈表節點 = 奇數鏈表最新節點的下一個
代碼
var oddEvenList = function(head) {
    if(!head) return ;
    var odd = head; // 奇數鏈表
    var even = head.next; // 偶數鏈表
    var evenHead = even // 偶數鏈表頭
    while(even && even.next ){
        odd.next = even.next
        odd = odd.next
        even.next = odd.next
        even = even.next
    }
    odd.next = evenHead
    return head
};
結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章