#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node * pNext;
}NODE,*PNODE;
PNODE createlist()
{
int i;
PNODE pHead = (PNODE)malloc(sizeof(NODE));
PNODE pTail = pHead;
pTail->pNext=NULL;
for (i=0; i<8;++i)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = i+1;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
PNODE createlist2()
{
int i;
PNODE pHead2 = (PNODE)malloc(sizeof(NODE));
PNODE pTail = pHead2;
pTail->pNext=NULL;
for (i=1; i<11;++i)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = i*2;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead2;
}
void traverselist(PNODE pHead)
{
PNODE p = pHead->pNext;
while (NULL != p)
{
printf("%3d",p->data);
p = p->pNext;
}
printf("\n");
}
void MergeList(PNODE pHead, PNODE pHead2, PNODE pHead3)
{
int i=0;
PNODE p = pHead->pNext;
PNODE p2 = pHead2->pNext;
pHead3 = pHead;
PNODE p3 = pHead3;
while(p != NULL && p2 != NULL)
{
if(p->data <= p2->data)
{
p3->pNext = p;
p3 = p;
p = p->pNext;
}
else
{
p3->pNext = p2;
p3 = p2;
p2 = p2->pNext;
}
}
p3->pNext = (p != NULL) ? p : p2;
free(pHead2);
}
int main()
{
PNODE pHead = NULL;
pHead = createlist();
traverselist(pHead);
PNODE pHead2 = NULL;
pHead2 = createlist2();
traverselist(pHead2);
PNODE pHead3 = NULL;
MergeList(pHead, pHead2, pHead3);
traverselist(pHead3);
}
最后只输出了前两个链表,并报错segmentation fault。
应该如何改正呢。