leetcode328 奇偶鍊錶

2021-10-01 02:53:36 字數 1488 閱讀 6330

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

請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 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

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

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

結點1作為奇數鏈的頭 結點2作為偶數鏈的頭

從第3個點開始遍歷,依次輪流附在奇、偶鏈的後面

遍歷完後,奇數鏈的尾連向偶鏈的頭,偶鏈的尾為空, 返回奇數鏈的頭

# definition for singly-linked list.

# class listnode(object):

# def __init__(self, x):

# self.val = x

# self.next = none

class solution(object):

def oddevenlist(self, head):

""":type head: listnode

:rtype: listnode

"""if not head or not head.next or not head.next.next:

return head

# 設定奇數鍊錶的頭

head_i=head

i=head_i

# 設定偶數鍊錶的頭

head_j=head.next

j=head_j

# 將奇數鍊錶的下乙個節點連上

i_next = i.next.next

i.next = i_next

i=i_next

# 從第三個節點開始遍歷

while i.next and i.next.next:

i_next = i.next.next

j_next = i.next

j.next = j_next

i.next = i_next

i = i_next

j = j_next

# 鍊錶是偶數結尾

if j.next.next:

j.next=j.next.next

# 鍊錶奇數結尾,偶數鍊錶的尾為空

else:

j.next = none

# 奇數鍊錶的尾指向偶數鍊錶的頭

i.next = head_j

return head_i

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 ...