Katherine_L 2020-03-12 10:34 采纳率: 0%
浏览 507

数据结构单链表合并问题

代码可以正常运行,但是提交到系统中说有内存错误,错误原因显示如下:
错误原因可能是:
非法的内存引用, 具体原因可能是:
1.数组越界使用;
2.指针的错误使用, 一般是对非用户区的地址空间进行读或者写操作;
3.越权操作文件指针, 程序中却未捕捉该类错误;
4.栈溢出, 一般是因为过多的递归调用或者过大的临时变量导致;5.程序使用的内存超过了题目设定的上限。

代码如下
单链表合并

#include <iostream>
#include<stdio.h>   //用于scanf,printf标准输入输出
#include<stdlib.h>  //用于malloc,free内存申请与释放
using namespace std;
typedef struct Node *LinkList;
struct Node
{
     int data;
     LinkList next;
};
LinkList CreatFromTail()   //构建单链表
{
     LinkList q,r,L;
     int i,n;
     L=(Node*)malloc(sizeof(Node));
     r=L;
     scanf("%d",&n);
     for(i=0;i<n;i++)
     {
          q=(Node*)malloc(sizeof(Node));
          scanf("%d",&q->data);
          r->next=q;
          r=q;
     }
     r->next=NULL;
     return L;
}
LinkList merge(LinkList a,LinkList b)    //合并两个链表
{
     LinkList p=a->next;
     while(p->next)
     {
          p=p->next;
     }
     p->next=b->next;
     free(b);
     return a;
}
LinkList DeleteSame(LinkList L)    //删除链表中的重复元素
{
     LinkList p=L->next,q,r;
     while(p!=NULL)
     {
          r=p->next;
          q=p;
          while(r!=NULL)
          {
               if(r->data==p->data)
               {
                    q->next=r->next;
                    r=r->next;
               }
               else
               {
                    q=q->next;
                    r=r->next;
               }
          }
          p=p->next;
     }
     return L;
}
LinkList sort(LinkList L)    //排序
{
     LinkList p=L->next,q,r;
     if(p!=NULL)
     {
          r=p->next;
          p->next=NULL;
          p=r;
          while(p!=NULL)
          {
               r=p->next;
               q=L;
               while(q->next!=NULL&&q->next->data<p->data)
                    q=q->next;
               p->next=q->next;
               q->next=p;
               p=r;
          }
     }
     return L;
}
void show(LinkList l)    //输出链表
{
     LinkList p=l;
     while(p)
     {
          p=p->next;
          printf("%d",p->data);
          printf(" ");
     }
}
int main()
{
     LinkList w,v,y,z,s;
     w=CreatFromTail();
     v=CreatFromTail();
     y=merge(w,v);
     s=DeleteSame(y);
     z=sort(s);
     show(z);
     return 0;
}
  • 写回答

1条回答 默认 最新

  • A_zjzj 2020-03-12 18:51
    关注

    我觉得可以把指针改成数组,直接表示下一个的下标,这样可以防止出错

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器