天任考研小編為大家整理了“2023考研計算機模擬試題(4)”相關內容,為報考計算機專業的考生們提供指導。更多有關計算機考研干貨可關注考研備考欄目。
2023考研計算機模擬試題(4)
(2)將兩個非遞減的有序鏈表合并為一個非遞增的有序鏈表。要求結果鏈表仍使用原來兩個鏈表的存儲空間, 不另外占用其它的存儲空間。表中允許有重復的數據。
[題目分析]
合并后的新表使用頭指針Lc指向,pa和pb分別是鏈表La和Lb的工作指針,初始化為相應鏈表的第一個結點,從第一個結點開始進行比較,當兩個鏈表La和Lb均為到達表尾結點時,依次摘取其中較小者重新鏈接在Lc表的表頭結點之后,如果兩個表中的元素相等,只摘取La表中的元素,保留Lb表中的元素。當一個表到達表尾結點,為空時,將非空表的剩余元素依次摘取,鏈接在Lc表的表頭結點之后。
[算法描述]
void MergeList(LinkList& La, LinkList& Lb, LinkList& Lc, )
{//合并鏈表La和Lb,合并后的新表使用頭指針Lc指向
pa=La->next; pb=Lb->next;
//pa和pb分別是鏈表La和Lb的工作指針,初始化為相應鏈表的第一個結點
Lc=pc=La; //用La的頭結點作為Lc的頭結點
Lc->next=NULL;
while(pa||pb )
{//只要存在一個非空表,用q指向待摘取的元素
if(!pa) {q=pb; pb=pb->next;}
//La表為空,用q指向pb,pb指針后移
else if(!pb) {q=pa; pa=pa->next;}
//Lb表為空,用q指向pa,pa指針后移
else if(pa->data<=pb->data) {q=pa; pa=pa->next;}
//取較小者(包括相等)La中的元素,用q指向pa,pa指針后移
else {q=pb; pb=pb->next;}
//取較小者Lb中的元素,用q指向pb,pb指針后移
q->next = Lc->next; Lc->next = q;
//將q指向的結點插在Lc 表的表頭結點之后
}
delete Lb; //釋放Lb的頭結點
}