qq_29881289 2021-10-25 00:35 采纳率: 75%
浏览 29
已结题

c数据结构,合并两个单链表,无法输出结果并提示segmentation fault

#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。
应该如何改正呢。

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-10-25 04:24
    关注

    把合并后链表作为返回值,不作为参数,合并函数返回值类型改为PNODE

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 创建了问题 10月25日

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘