有序鍊錶的合併問題

2021-08-08 14:26:52 字數 1353 閱讀 5428

題目:已知兩個非降序鍊錶序列s1與s2,設計函式構造出s1與s2的並集新非降序鍊錶s3。

輸入格式:輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。

輸出格式: 在一行中輸出合併後新的非降序鍊錶,數字間用空格分開,結尾不能有多餘空格;若新鍊錶為空,輸出null。

輸入樣例

1 3 5-1

2 4 6 8 10 -1

輸出:

1 2 3 4 5 6 8 10

因為pta卡時間,所以最開始我的**時間負責都是o(n2)就超時了,經過思考後想到,既然是有序鍊錶的合併,所以當其中乙個的值大於另乙個值時,後面的數一定大於前面的,就不需要遍歷到最後一一比較了。

#include 

#include

#include

#include

using namespace std;

typedef int status;

typedef int elemtype;

#define true 1

#define false 0

#define ok 1

#define error 0

#define infeasible -1

#define overflow -2

typedef struct lnode

lnode,*linklist;

status

crated(linklist& l1,linklist& l2)//尾插法

}a=0;

lnode *rearptr1,*curptr1;

l2=(lnode*)malloc(sizeof (lnode));

l2->next=null;

rearptr1=l2;

for(int i=0; a!=-1; i++)

}return ok;

}int main()

else

if(p1->data

data)

if(p1&&p2)

else

if(p1->data

data)}}

if(!p1&&p2)

}if(!p2&&p1)

}p=null;

for(int i=0; pnew!=null; i++)

else

pnew=pnew->next;

}cout<0;

}

非常不足的地方是,我把合併的演算法寫到main函式裡面了。

有序鍊錶的合併問題

有序鍊錶的合併問題 兩個有序鍊錶合併,並且不建立新的鍊錶,直接合併 1 判斷兩個鍊錶的頭部,小的那個是合成鍊錶的頭。2 p q 分別是第乙個和第二個鍊錶的頭s是p q 判斷大小之後的小的,p q中小的後移直到其中乙個為空。3 直接把不為空的連線到鍊錶後邊。4 輸出鍊錶 合併的 public stat...

鍊錶問題(二) 有序鍊錶合併

已知兩個鍊錶head1和head2個字有序,請把他們合併成乙個鍊錶依然有序 包含所有結點,即便大小相同 struct node 方法一 遞迴實現 node merge node head1,node head2 else return head 方法二 迴圈實現 node merge node he...

有序鍊錶合併

歸併排序 la lb是兩個帶頭結點的有序鍊錶,歸併兩個鍊錶得到新的有序表lc。設立指標pa,pb,pc,其中pa和pb分別指向la,lb中當前待比較的結點,pc指向lc表中當前最後乙個結點。將pa,pb結點中值較小的乙個鏈結到pc之後。typedef struct node node,plink 銷...