2020 11 13 奇偶鍊錶

2021-10-10 12:52:28 字數 1456 閱讀 7810

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

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

示例一

輸入: 1->2->3->4->5->null

輸出: 1->3->5->2->4->null

示例二

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

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

說明

應當保持奇數節點和偶數節點的相對順序。

鍊錶的第乙個節點視為奇數節點,第二個節點視為偶數節點,以此類推。

因為考研的專業課時資料結構所以對於這種鍊錶的操作還是比較熟悉的,這類鍊錶問題主要時使用斷鏈的方法,把奇數字的node組成一鏈,偶數字的node組成一鏈,然後在連起來。

起始時首先判斷這個鍊錶的狀態,如果這個鍊錶時空的或者只有1,2個node,那麼這個鍊錶時直接符合條件的,不需要調整直接輸出就行。如果需要調整,則將node q指向第乙個node,node p,p2指向第二位(p2主要時用於後續的鍊錶的鏈結用),node r指向第三個node(用於拼接符合要求的節點),然後斷開p,q的next,其大致狀態如下圖1。

然後將奇數字的r接到q,偶數字的r接到p,直到r位空指標。

public

class

nov_13_oddevenlist

else

if(r != null)

} q.next = p2;

return head;}}

public

static

void

main

(string[

] args)

nov_13_oddevenlist nov_13_oddevenlist=

newnov_13_oddevenlist()

; head=nov_13_oddevenlist.

oddevenlist

(head)

;while

(head!=null)}}

class

listnode

listnode

(int val)

listnode

(int val, listnode next)

}

這個演算法的思想其實很簡單,沒有說明複雜的地方,我在做這個題目的過程中遇到的主要問題是這個head=null和head.next=null的情況沒有考慮到。

鍊錶 328 奇偶鍊錶

給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 null ...

python LeetCode 奇偶鍊錶

給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 null ...

328 奇偶鍊錶

給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 null輸...