本題要求實現乙個函式,實現對單迴圈鍊錶中奇數和偶數結點的移動,要求奇數在前面,偶數在後面,且結點之間的相對順序不變。
1.建立結構體並巨集定義變數。**如下
linklist createlist_tail_loop()
tail->next = head;
return tail;
}
2.奇偶點移動函式,此函式是本題的重點,採用的方法大致為:
①建立兩個新鍊錶,head1鍊錶負責裝偶數,head2鍊錶負責裝奇數。
②遍歷鍊錶每乙個節點,若為奇數,則利用尾插法插入head2鍊錶;若為偶數,則利用尾插法插入head1鍊錶;
③將head1和head2的鍊錶頭尾連線,形成乙個新的單向迴圈鍊錶,並將次鍊錶的尾指標作為返回值。
**如下
pnode move_odd_even
(linklist tail)
else
//若不是偶數,則為奇數
pre=q;
q=q->next;
//pre始終保持在q的前面
} head1=head1->next;
//********
pre2->next=head1;
//*******
pre1->next=head2;
//**星號部分的語句均為將0head1鍊錶和head2鍊錶進行形成乙個新的但循壞鍊錶
return pre1;
//返回新循壞鍊錶的尾指標
}
3.列印鍊錶函式。注意,該函式的形參為單迴圈鍊錶的尾指標,**如下
void
print
(linklist tail)
}
4.釋放鍊錶,防止占用記憶體,注意,此函式的形參也是尾指標
**如下
void
destorylist_link
(linklist tail)
free
(pre)
;free
(tail)
;}
5.主函式如下
int
main()
輸入和輸出樣例如下,此編譯環境為code::block17.12
刪除鍊錶A中與鍊錶B結點相同的結點
題目描述 有兩串鍊錶表示為a和b,刪除鍊錶a中的結點,滿足刪除條件的結點是該結點與鍊錶b中某結點的值相同。如下 include using namespace std typedef struct list plist int deletenode plist plist void createli...
鍊錶 328 奇偶鍊錶
給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 null ...
刪除鍊錶中的結點
1.題目描述 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點,你將只被給定要求被刪除的節點。現有乙個鍊錶 head 4,5,1,9 它可以表示為 示例 1 輸入 head 4,5,1,9 node 5輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該...