合併兩個有序單鏈表,合併後依舊有序

2021-07-11 12:57:05 字數 985 閱讀 6162

思路:類似於摘結點法,利用尾指標(tail)把結點摘下來然後鏈在一起,然後返回頭指標

#define _crt_secure_no_warnings 1

//合併兩個有序單鏈表,合併後依舊有序

#includeusing namespace std;

typedef int datatype;

typedef struct slistnode

slistnode;

slistnode* createnode(datatype x) //創造結點

void pushback(slistnode * &pphead, datatype data )

else

cur->next = createnode( data);

}}//列印

void printsnodelist(slistnode *&pphead)

cout << "null" << endl;

}//合併兩個有序單鏈表,合併後依舊有序

slistnode* merge(slistnode * l1, slistnode* l2)

else

slistnode* tail = newhead; //利用尾指標進行摘結點,

while (l1 && l2) //當l1和l2兩個鍊錶都還有值時。

else

}if (l1 ) //如果l1還有剩餘的結點

tail->next = l1;

if (l2 ) //l2還有剩餘的結點

如果有什麼不對的地方,希望能夠指出,大家一起學習,謝謝了。

合併兩個有序的單鏈表,合併後依然有序

分析過程 首先我要合併有序的鍊錶,合併後依然有序。我就要有兩個指標,分別指向兩個鍊錶,觀察所給的兩個鍊錶是公升序還是降序的來確定合併後的鍊錶是否有序。這裡預設的認為鍊錶時公升序的 用指標分別指向兩個鍊錶的第乙個節點,比較大小,那個大,將元素尾插進入我所要返回的新鍊錶中去。一次比較迴圈往復,直至某乙個...

合併兩個有序單鏈表

include using namespace std typedef struct nodenode,linklist void creatlist linklist l void insert int n,node p void show linklist l cout num head2 ne...

合併兩個有序單鏈表

思路 第一種 遞迴法 這個方法不好想,遞過去的時候做的事情是找到新的單鏈表的下乙個節點,歸的時候做的是告訴每個節點的next是什麼繫結關係,帶入資料就能知道怎麼回事 public listnode merge listnode a,listnode b if b null listnode newh...