題目:已知兩個非降序鍊錶序列s1與s2,設計函式構造出s1與s2的並集新非降序鍊錶s3。因為pta卡時間,所以最開始我的**時間負責都是o(n2)就超時了,經過思考後想到,既然是有序鍊錶的合併,所以當其中乙個的值大於另乙個值時,後面的數一定大於前面的,就不需要遍歷到最後一一比較了。輸入格式:輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。
輸出格式: 在一行中輸出合併後新的非降序鍊錶,數字間用空格分開,結尾不能有多餘空格;若新鍊錶為空,輸出null。
輸入樣例
1 3 5-1
2 4 6 8 10 -1
輸出:
1 2 3 4 5 6 8 10
#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 銷...