weixin_45687336 2020-04-27 22:49 采纳率: 0%
浏览 164

做有关单链表的数据结构实验时,程序不报错,但也不完全运行

问题:有一个带头结点的单链表L=(a1,b1,a2,b2,…,an,bn),设计一个算法将其拆分成两个带头结点的单链表L1和L2,其中L1=(a1, a2,…,an),L2=(b1,b2,…,bn),要求L1使用L的头结点。

头文件:
#include
using namespace std;
#include
#include
#include

typedef int ElemType;
typedef struct  _tag_LinkNode
{
    ElemType date;
    struct _tag_LinkNode *next;
}LinkNode;

void split(LinkNode *&list, LinkNode *&list1, LinkNode *&list2);
void CreateListR(LinkNode *&list, ElemType a[], int n);
void DestroyList(LinkNode *&list);
void DispList(LinkNode *list);

实现文件:

using namespace std;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef int ElemType;
typedef struct  _tag_LinkNode
{
    ElemType date;
    struct _tag_LinkNode *next;
}LinkNode;

void split(LinkNode *&list, LinkNode *&list1, LinkNode *&list2)
{
    list1 = list;
    list2 = (LinkNode *)malloc(sizeof(LinkNode));
    list2->next  = NULL;
    LinkNode *p = list->next, *q , *r1 = list1, *r2 =list2;
    while(p!=NULL)
    {
        q =p->next;
        r1->next = p, r2->next = q;
        r1 = p, r2 = q;
        p = q->next;
    }
        r1->next = r2->next=  NULL;
}


void CreateListR(LinkNode *&list, ElemType a[], int n)
{
    LinkNode *p= list ,*q;
    for(int i=0;i<n;i++)
    {
        q = (LinkNode *)malloc(sizeof(LinkNode));
        q->date = a[i];
        p->next = q;
        p = q;
    }
    p->next=NULL;
}

void DestroyList(LinkNode *&list)
{
    LinkNode *pre=list, *q=list->next;
    while(q!=NULL)
    {
        free(pre);
        pre = q;
        q = q->next;    
    }
    free(pre);
}

void DispList(LinkNode *list)
{
    LinkNode *p=list;
    while(p->next!=NULL)
    {
        p = p->next;
        cout<<p->date<<' ';
    }
}


测试文件:

#include<iostream>
using namespace std;
#include "SplitLinkList.h"

int main()
{
    LinkNode *L1, *L2, *L;
    ElemType a[10] = {10, 30, 50, 70, 90, 80, 60, 40, 20, 0};
    CreateListR(L, a, 10);
    cout<<"建表结果:";
    DispList(L);

    split(L, L1 , L2);

    cout<<"L1:";
    DispList(L1);
    cout<<"L2:";
    DispList(L2);
    DestroyList(L1);
    DestroyList(L2);

    return 0;
}

结果:
图片说明

  • 写回答

1条回答 默认 最新

  • Iambinary 2020-04-28 08:15
    关注

    Runtime Error(RE),很可能是指针操作不当。

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?