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