链表-合并两个升序链表
2020-03-05 本文已影响0人
茶还是咖啡
两个链表升序有序,合并两个升序链表
eg:
L1: 1->1->2->3->5
L2: 3->4->5->6->6
合并后:
1->1->2->3->3->4->5->5->6->6
该题可以想象成创建一个新的链表,而节点是从两个旧链表中选择的过程。
-
通过比较两个链表头结点的小,确定本次使用的节点为h1的头结点,进行头删,然后尾插到新的链表中。
-
通过比较两个链表头结点的小,确定本次使用的节点为h1的头结点,进行头删,然后尾插到新的链表中。
-
重复上面的动作,直至其中一根链表为空,将不为空的链表直接尾插到新的链表中。
code
ElemSN* mergeLinkList(ElemSN *h1,ElemSN *h2){
if(h1==NULL){
return h2;
}
if(h2==NULL){
return h1;
}
ElemSN *p=NULL,*tail=NULL,*hn=NULL;
while (h1&&h2) {
if(h1->data>h2->data){
p=h1;
h1=h1->next;
}else{
p=h2;
h2=h2->next;
}
if(hn==NULL){
hn = p;
tail = p;
}else{
tail->next=p;
tail = tail->next;
}
}
if(h1!=NULL){
tail->next=h1;
}else{
tail->next=h2;
}
return hn;
}