链表的简单操作为何有错误?

来源:百度知道 编辑:UC知道 时间:2024/09/24 17:16:02
/*单链表插入和删除*/
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;

typedef struct LNode{
ElemType date;
struct LNode *next;
}LNode,*LinkList;

int InitList_L(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return 1;
}

int ListInsert(LinkList &L,int i,ElemType e)
{
LinkList p=L;int j=0;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1)return 0;
LinkList s=(LinkList)malloc(sizeof(LNode));
s->date=e;s->next=p->next;p->next=s;
return 1;
}

int ListDelete_L(LinkList &L,int i,ElemType e)
{
LinkList p=L;int j=0;
while(p->next&&j<i-1)
{
p=p->next;++j;
}
if(!(p->next)||j>i-1)return 0;
LinkList q=p->next;p->next=q->next;e=q->date;free(q);
return 1;
}

void Disp_L(LinkList &L)
{
LinkList p=L

int ListDelete_L(LinkList &L,int i,ElemType e)
___________________________~~~~~~~~~~~~~~ElemType &e
改为引用
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
我改成引用后,运行得很好
输出yxxy
你把错误贴出来吧
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
知道了,你的文件后缀是.c吧,不是.cpp
c中没有 &引用这个概念,c++中才有的
你把后缀改成.cpp,再编译一下,用C++编译器如 VC++。
如果没有C++编译器,就把所有&去掉,再改
ElemType ListDelete_L(LinkList &L,int i)
{
LinkList p=L;int j=0;
while(p->next&&j<i-1)
{
p=p->next;++j;
}
if(!(p->next)||j>i-1)return 0;
LinkList q=p->next;p->next=q->next;e=q->date;free(q);
return e;
~~~~~~~~~~~~~~~~改成e
}
这样把e用返回值返回。
在main()中这样用e=ListDelete_L(L,1);

有引用就不用这么麻烦了,这是C++比C方便的具体表现

LinkList &L//是指针引用,可以作函数参数,表示L本身