資料結構 演算法設計題 合併有序鍊錶2

2021-10-19 11:04:46 字數 1013 閱讀 1854

將兩個非遞減的有序鍊錶合併成乙個非遞增的有序鍊錶。要求鍊錶仍使用原來兩個鍊錶的儲存空間,不另外使用其他的儲存空間,表中執行有重複的元素。

與合併有序鍊錶1類似的思路,通過更改結點的指標域來重新建立元素之間的線性關係,得到新鍊錶。

有兩個關鍵點:

合併的鍊錶與原鍊錶順序相反,利用前插法建立鍊錶,形成遞減序列。

當乙個表到達表尾為空時,另乙個非空表的剩餘元素應該利用前插法依次插入lc的頭結點之後,而不能全部鏈結在lc表的最後

/*

將兩個非遞減的有序鍊錶合併成乙個非遞增的有序鍊錶。要求鍊錶仍使用原來兩個鍊錶的儲存空間,不另外使用其他的儲存空間,表中執行有重複的元素。

*/#include

using

namespace std;

typedef

struct lnode lnode,

*linklist;

/*建立鍊錶

*/void

createlist

(linklist &l)

cout <<

"建立鍊錶成功!"

<< endl;}/*

列印鍊錶中的元素

*/void

printlist

(linklist l)

cout << endl;}/*

合併鍊錶

*/void

mergelist

(linklist &la, linklist &lb, linklist &lc)

elseif(

!pb)

else

if(pa-

>data <= pb-

>data)

else

// q指向的結點插在lc的後面

q->next = lc-

>next;

lc->next = q;}}

intmain()

常考資料結構和演算法 合併有序鍊錶

將兩個有序的鍊錶合併為乙個新鍊錶,要求新的鍊錶是通過拼接兩個鍊錶的節點來生成的,且合併後新鍊錶依然有序。class listnode listnode int val public class testmergetlist param l1 listnode類 param l2 listnode類 ...

資料結構例程 合併有序表

本文針對資料結構基礎系列網路課程 2 線性表中第15課時有序表。問題 有兩個有序表la和lb,將它們合併成乙個有序表lc。要求不破壞原有表la和lb 演算法思想 解法1 用順序表實現 支援的演算法庫,及list.件,鏈結 include list.h void unionlist sqlist la...

合併有序鍊錶

將兩個有序的鍊錶合併為乙個新鍊錶,要求新的鍊錶是通過拼接兩個鍊錶的節點來生成的,即不開闢新的記憶體空間 首先,為了方便操作鍊錶,我們定義乙個dummyhead,我們遍歷兩個鍊錶,直到其中有乙個到達尾部,則停下來 在遍歷的過程中,我們將元素值小的節點依次鏈在mergerlist的後邊,最後,我們看看哪...