給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。
請嘗試使用原地演算法完成。你的演算法的空間複雜度應為o(1)
,時間複雜度應為o(nodes)
,nodes
為節點總數。
示列1:
輸入: 1->2->3->4->5->null示列2:輸出: 1->3->5->2->4->null
輸入: 2->1->3->5->6->4->7->null設定倆個指標依次向後移動將原先鍊錶分離出奇偶倆個鍊錶,再將倆個鍊錶合併。輸出: 2->3->6->7->1->5->4->null
指標odd
首先指向頭結點,指標even
指向頭結點之後第乙個節點,此時該結點為偶數鍊錶的頭結點。將even
指標指向的結點(該結點為與odd
同奇偶性的下乙個結點)連線在odd
指標的後面,odd
指標後移,此時odd
指標指向的結點為even
鏈所需要的下一結點,將odd
指向的結點連線在even
指標的後面,even
指標後移。如此類推,最後必有乙個指標位於鍊錶末尾,於是迴圈判斷條件為eventemp!=nil&&eventemp.next!=nil
關鍵**
odd.next=eventemp.next//odd的next指向even的next
odd=odd.next//odd指標後移
eventemp.next=odd.next //even的next指向odd的next
eventemp=eventemp.next//even指標後移
/**
* definition for singly-linked list.
* type listnode struct
*/func
oddevenlist
(head *listnode)
*listnode
var even *listnode
var odd *listnode
var eventemp *listnode
odd=head
even=head.next
eventemp=even
for eventemp!=
nil&&eventemp.next!=
nil odd.next=even//合併倆個鍊錶
return head
}
每日刷題 奇偶鍊錶
請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 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 n n 這個時候我想到了肯定有簡單的...
Go每日一題 6
以下 是否編譯通過 package main import fmt type myint1 inttype myint2 int func main 輸出結果 編譯不通過,cannot use i type int as type myint1 in assignment。myint1 和 myin...