LeetCode 328題 奇偶鍊錶

2021-10-10 13:07:21 字數 1273 閱讀 7189

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

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

示例 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

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

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

解題思路:這個題,其實如果不考慮題目所說的要求,演算法時間複雜度為o(1)的話,思路就很簡單,開闢乙個空間,存奇數所對應的位置,原來的鍊錶直接刪除奇數所對應的位置存偶數對應位置的數,然後將奇數所對應的鍊錶鏈結到原來的鍊錶上,一遍迴圈完成。

class solution 

}//這邊要注意,記得把奇數的末尾清空,不然可能會造成迴圈的情況

odd.next=null;

even.next=cur.next;

return res.next;}}

為了迎合題目所給出的要求,空間複雜度為o(1),還是思考了一下,如圖,假設一條鍊錶1-->2-->3-->4-->5-->6-->7 ,如圖。將奇數字與奇數字、偶數與偶數為放一起,換個角度想就是將所有的原來奇數字的數全部往前插入排列好。

此時,我們需要兩個指標,乙個指標指向奇數字往前要插入的位置,乙個指標指向要往前插入的那個奇數。,所以定義的兩個變數cur1和cur2,讓cur1和cur2的next分別指向奇數字要插入的位置和要移動的奇數字。**如下:

class solution 

//定義cur1指向奇數字要插入的位置

listnode cur1=head;

//定義cur2指向要插入的奇數字的那個數

listnode cur2=head.next;

while(cur2!=null)else

}return head;}}

其實我也不知道這個空間複雜度是不是o(1),因為後面的**所花的時間複雜度比前面那段也並沒有少很多,單純的認為全部都是在原鏈上面操作就是o(1)。

LeetCode 328 奇偶鍊錶

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

LeetCode 328 奇偶鍊錶

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

Leetcode328 奇偶鍊錶

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