大概思路:1.先寫(xiě)出建立鏈表的函數(shù)(creatlist):分配頭節(jié)點(diǎn),尾指針置空。
2.寫(xiě)出插入節(jié)點(diǎn)的代碼函數(shù):申請(qǐng)一片空間存放要插入的節(jié)點(diǎn),把新插入的節(jié)點(diǎn)置空,令指向鏈表的頭節(jié)點(diǎn)的下一個(gè)指針指向該節(jié)點(diǎn),在把該指針指向新插入的節(jié)點(diǎn)。用if函數(shù)寫(xiě)出當(dāng)輸入的指小于零時(shí)跳出,(可自定義任何數(shù),此處我選擇小于零)。
3.寫(xiě)出用循環(huán)思想輸出鏈表的每個(gè)節(jié)點(diǎn)的函數(shù)
4.第四步也是最重要的一步,合并鏈表,定義三個(gè)指針,其中有一個(gè)中間指針pre,另外兩個(gè)指針?lè)謩e指向兩個(gè)鏈表的頭節(jié)點(diǎn),將要合并到的鏈表指向其中一個(gè)鏈表,為了滿(mǎn)足題目中不占用其他存儲(chǔ)空間的要求,再用while和if循環(huán)比較,pa->data <= pb->data時(shí),令中間指針pre指向pa下一個(gè)結(jié)點(diǎn),pa下一個(gè)結(jié)點(diǎn)指向La下一個(gè)結(jié)點(diǎn),即置空,再把pa連起來(lái),然后pa指針后移。反之同理。
5.當(dāng)兩個(gè)鏈表長(zhǎng)度不一樣時(shí),我們需要處理剩下的數(shù)據(jù),此時(shí)只需把剩下的數(shù)據(jù)接到我們排好的鏈表之后就可以。
6.接下來(lái)在主函數(shù)main中運(yùn)用我們定義的函數(shù)就完成了。
#include?<stdio.h>
#include?<iostream>
typedef?struct?LNode?{
int?data;
struct?LNode* next;
}LNode,*Linklist;
//建立一個(gè)鏈表并輸入結(jié)點(diǎn)的值
void?creatlist(Linklist?&L) {
? ? Linklist?p, q;
? ? L?= (Linklist)malloc(sizeof(LNode));//分配一個(gè)頭節(jié)點(diǎn)
? ? L->next ?= NULL;
? ? q = L;
? ? p = L;
? ? while?(L) {//新增并插入一個(gè)結(jié)點(diǎn)
? ? ? ? q = (Linklist)malloc(sizeof(LNode));//分配一個(gè)結(jié)點(diǎn)
? ? ? ? q->next = NULL;
? ? ? ? printf("輸入結(jié)點(diǎn)的值:\n");
? ? ? ? scanf_s("%d", &q->data);
? ? ? ? if?(q->data < 0)
? ? ? ? ? ? break;
? ? ? ? p->next = q;
? ? ? ? p = q;
? ? }
}
//輸出鏈表
void?print(Linklist?&L) {
? ? Linklist?p;
? ? p = L->next;
? ? while?(p) {
? ? ? ? printf("%d ", p -> data);
? ? ? ? p = p->next;
? ? }
}
//合并鏈表
void?integratelist(Linklist& La, Linklist& Lb, Linklist& L) {
? ? Linklist?pa, pb, pre;
? ? pa = La->next;
? ? pb = Lb->next;
? ? L?= La;
? ? La->next = NULL;//鏈表置空
? ? while?(pa && pb) {
? ? ? ? if?(pa->data <= pb->data) {
? ? ? ? ? ? pre = pa->next;//中間指針指向pa下一個(gè)結(jié)點(diǎn)
? ? ? ? ? ? pa->next=La->next;//pa下一個(gè)結(jié)點(diǎn)指向La下一個(gè)結(jié)點(diǎn),即置空
? ? ? ? ? ? La->next=pa;//鏈接pa
? ? ? ? pa=pre;
}
? ? else{
? ? ? ? pre = pb->next;
? ? ? ? pb->next = La->next;
? ? ? ? La->next = pb;
? ? ? ? pb = pre;
? ? }
}
if?(pa)//處理pa剩余的部分
? ? pb = pa;
while?(pb) {//處理pb剩余的部分
? ? pre = pb->next;
? ? pb->next = La->next;
? ? La->next = pb;
? ? pb = pre;
}
? ? free(Lb);
}
int?main() {
? ? Linklist?La, Lb, L;
? ? creatlist(La);
? ? creatlist(Lb);
? ? integratelist(La, Lb, L);
? ? print(L);
? ? return?0;
}
下面是運(yùn)行的結(jié)果文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-745437.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-745437.html
到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)2.2,將兩個(gè)非遞減的有序鏈表合并為一個(gè)非遞增的有序鏈表,要求結(jié)果鏈表仍使用原來(lái)兩個(gè)鏈表的存儲(chǔ)空間,不占用其他的存儲(chǔ)空間。表中允許有重復(fù)的數(shù)據(jù)。的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!