將兩個非遞減的有序鍊錶合併成乙個非遞增的有序鍊錶。要求鍊錶仍使用原來兩個鍊錶的儲存空間,不另外使用其他的儲存空間,表中執行有重複的元素。
與合併有序鍊錶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的後邊,最後,我們看看哪...