兩個有序單鏈表的合併 二路歸併

2021-09-08 20:50:27 字數 2308 閱讀 4550

用lc指向合併後的新錶。pa,pb,pc分別作為la,lb,lc的工作指標,pa,pb初始化分別指向兩個有序鍊錶的第乙個元素,pc初始化指向la。從第乙個指標開始比較,哪個元素小,就接在lc後面,如果兩個元素相當,就把乙個鍊錶接在後面,刪除另乙個鍊錶的那個元素,這樣確保合併後的表內無重複元素。當乙個表到達表尾結點為空時,將非空的表接在lc表後面。

#include"linklist.cpp"

void print(linknode *l)

} void mergelist(linknode *la,linknode *lb,linknode *&lc)

else if(pa->data>pb->data)

else

}pc->next=pa?pa:pb;//如果pa非空,就將pa接在lc後面

}int main()

; int b=;

linknode *la,*lb,*lc;

int na=3,nb=6;

createlistr(la,a,na);

createlistr(lb,b,nb);

mergelist(la,lb,lc);

print(lc);

return 0;

}

合併後的序列存在lb鍊錶裡面。pa,pb作為工作指標,初始化指向la,lb的第乙個元素。從第乙個元素比較,如果pa小於pb,就將pa插在pb前面,直到有乙個表到達表尾為空為止,最後判斷la是否到達表尾,如果沒有到達就將pa接在pb後面。

#include"linklist.cpp"

void print(linknode *l)

} void mergelist(linknode *la,linknode *lb)

else if(pa->data==pb->data)

else

} while(pa) }

int main()

; int b=;

linknode *la,*lb;

createlistr(la,a,3);

createlistr(lb,b,6);

mergelist(la,lb);

print(lb);

return 0;

}

//單鏈表基本運算演算法

#include #include typedef int elemtype;

typedef struct lnode

linknode; //宣告單鏈表結點型別

void createlistf(linknode *&l,elemtype a,int n)

//頭插法建立單鏈表

}void createlistr(linknode *&l,elemtype a,int n)

//尾插法建立單鏈表

r->next=null; //終端結點next域置為null

}void initlist(linknode *&l)

void destroylist(linknode *&l)

free(pre); //此時p為null,pre指向尾結點,釋放它

}bool listempty(linknode *l)

int listlength(linknode *l)

return(i);

}void displist(linknode *l)

printf("\n");

}bool getelem(linknode *l,int i,elemtype &e)

if (p==null) //不存在第i個資料結點

return false;

else //存在第i個資料結點 }

int locateelem(linknode *l,elemtype e)

if (p==null)

return(0);

else

return(n);

}bool listinsert(linknode *&l,int i,elemtype e)

if (p==null) //未找到位序為i-1的結點

return false;

else //找到位序為i-1的結點*p }

bool listdelete(linknode *&l,int i,elemtype &e)

if (p==null) //未找到位序為i-1的結點

return false;

else //找到位序為i-1的結點p

}

合併兩個有序單鏈表

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...

合併兩個有序單鏈表

題目 給定兩個有序單鏈表的頭節點head1和head2,請合併兩個有序鍊錶,合併後的鍊錶依然有序,並返回合併後的鍊錶的頭節點。例如 0 2 3 7 null 1 3 5 7 9 null 合併後的鍊錶為 0 1 2 3 3 5 7 7 9 null 本題考察鍊錶基本操作 關鍵是能寫出時間複雜度o m...