鍊錶中奇偶結點的移動

2021-10-09 23:32:48 字數 1272 閱讀 7459

本題要求實現乙個函式,實現對單迴圈鍊錶中奇數和偶數結點的移動,要求奇數在前面,偶數在後面,且結點之間的相對順序不變。

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 的第二個節點,那麼在呼叫了你的函式之後,該...