#include "myHead.h"
#include "allListNode.h"
/*
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。
*/
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
//簡化代碼
// if(pHead1 == NULL&& pHead2==NULL)
// return NULL;
// else
if(pHead1==NULL)
{
return pHead2;
}
else if(pHead2==NULL){
return pHead1;
}
ListNode* p,*q,*head;
q = NULL;
//簡化代碼
// if(pHead1 != NULL&& pHead2!=NULL){
while(pHead1 != NULL&& pHead2!=NULL){
if(pHead1->val <= pHead2->val){
p = (ListNode *)malloc(sizeof(ListNode));
p->val = pHead1->val;
if(q==NULL){
q = p;
head = q;
cout<<"a"<<q->val<<" ";
}
else {
q->next = p;
q = q->next;
cout<<"b "<<q->val<<" ";
}
pHead1 = pHead1->next;
}
else{
p = (ListNode *)malloc(sizeof(ListNode));
p->val = pHead2->val;
if(q==NULL){
q = p;
head = q;
cout<<"c "<<q->val<<" ";
}
else {
q->next = p;
q = q->next;
cout<<"d "<<q->val<<" ";
}
pHead2 = pHead2->next;
}
}
if(pHead1 != NULL){
q->next = pHead1;
}
else{
q->next = pHead2;
}
// }
return head;
}
int main(){
int a[]={2,4,5};
int b[] = {1,2,4,6};
int alen = sizeof(a)/sizeof(int);
int blen = sizeof(b)/sizeof(int);
ListNode *h1,*h2,*h;
h1 = createListNode(a,alen);
h2 = createListNode(b,blen);
cout<<"h1: ";
printListNode(h1);
cout<<endl<<"h2: ";
printListNode(h2);
h=Merge(h1,h2);
cout<<endl<<"h: ";
printListNode(h);
return 1;
}
劍指offer刷題之c++實現的合併兩個有序的鏈表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.