我用C++寫了個程式將兩個有序鏈表合并成一個鏈表,希望大家看一下問題出在哪?下面是定義的合并函式:
ListNode * Merge(ListNode *Head1,ListNode *Head2)
{
ListNode *p,*q,*pa,*w;
q=Head2;
while(q)
{
p=q;
q=q->Next;
pa=Head1;
while(pa)
{
w=pa;
if(p->e<=pa->e)
{
//if(p->e==w->e)
//break;
p->Next=pa;
w->Next=p;
break;
}
else
pa=pa->Next;
}
}
return w;
}
如果要進行測驗下面是完整的程式:
#include <iostream>
using namespace std;
//定義一個鏈表節點
typedef struct ListNode
{
int e;
struct ListNode * Next;
}ListNode;
//插入一個新節點到鏈表中(放在鏈表頭部)
void CreateList(ListNode * & head,int data)
{
//創建新節點
ListNode * p=(ListNode*)malloc(sizeof(ListNode));
p->e=data;
p->Next=NULL;
if(head==NULL)
{
head=p;
return;
}
p->Next=head;
head=p;
}
void printList(ListNode* head)
{
ListNode * p=head;
while(p!=NULL)
{
cout<<p->e<<" ";
p=p->Next;
}
cout<<endl;
}
ListNode * Merge(ListNode *Head1,ListNode *Head2)
{
ListNode *p,*q,*pa,*w;
q=Head2;
while(q)
{
p=q;
q=q->Next;
pa=Head1;
while(pa)
{
w=pa;
if(p->e<=pa->e)
{
//if(p->e==w->e)
//break;
p->Next=pa;
w->Next=p;
break;
}
else
pa=pa->Next;
}
}
return w;
}
int main()
{
ListNode * Head1=NULL;
ListNode * Head2=NULL;
for(int j=5;j>2;j--)
CreateList(Head1,j);
for(int i=3;i>0;i--)
CreateList(Head2,i);
Head1=Merge(Head1,Head2);
printList(Head1);
//printList(Head2);
system("PAUSE");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/81034.html
標籤:基礎類
