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 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误