給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。結點1作為奇數鏈的頭 結點2作為偶數鏈的頭請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 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
說明:應當保持奇數節點和偶數節點的相對順序。
鍊錶的第乙個節點視為奇數節點,第二個節點視為偶數節點,以此類推。
從第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 ...