为什么创建单链表之后 的显示操作没有执行啊
#include
#include
#include
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
typedef int Status;
Status initList(LinkList &L)//初始化
{
L=new LNode;
L->next =NULL;
return OK;
}
//创建单链表
void CreatList_H(LinkList &L,int n)
{
L=new LNode;
L->next=NULL;
for(int i=0;inew LNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
void Print(LinkList L)//打印
{
LinkList p=L->next;
while(p)
{
cout<data<<" ";
p=p->next;
}
cout<return;
}
Status ListInsert(LinkList &L,int i,ElemType e)//插入元素
{
LinkList p=L;
int j=0;
while(p && (j1))
{
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR;
LinkList s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
LNode *LocateElem(LinkList L,ElemType e)//查找
{
LinkList p=L->next;
while(p &&p->data!=e)
p->next;
return p;
}
Status ListDelete(LinkList &L,int i)//删除
{
LinkList p=L;
int j=0;
while((p->next)&&(j1))
{
p=p->next;
++j;
}
if(!(p->next)||(j>i-1)) return ERROR;
LinkList q=p->next;
p->next=q->next;
delete q;
return OK;
}
int main()
{
int n,i;
LinkList L;
ElemType e;
initList(L);
cout<<"请输入元素"<>n;
CreatList_H(L,n);
cout<<"链表元素为:"<Print(L);
return 0;
}
修改如下,改动处见注释,供参考:
#include<iostream>
//#include <stdio.h> 修改
//#include <stdlib.h> 修改
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
typedef int Status;
Status initList(LinkList &L)//初始化
{
L=new LNode;
L->next =NULL;
return OK;
}
//创建单链表
void CreatList_H(LinkList &L,int n)
{
//L=new LNode; 修改 此行多余
//L->next=NULL; 修改 此行多余
printf("请分别输入%d个结点元素值:\n", n); //修改
for(int i=0;i<n;++i)
{
LinkList p=new LNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
void Print(LinkList L)//打印
{
LinkList p=L->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
return;
}
Status 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 ERROR;
LinkList s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
LNode *LocateElem(LinkList L,ElemType e)//查找
{
LinkList p=L->next;
while(p && p->data!=e)
p->next;
return p;
}
Status ListDelete(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 ERROR;
LinkList q=p->next;
p->next=q->next;
delete q;
return OK;
}
int main()
{
int n,i;
LinkList L;
ElemType e;
initList(L);
cout<<"请输入链表结点个数:"<<endl;
cin>>n;
CreatList_H(L,n);
cout<<"链表元素为:"<<endl;
Print(L);
return 0;
}
CreatList_H(L,n);
调试下,这里L是否创建正确了。
看了一下你创建单链表的函数,你创建L应该是为了当头节点吧,后面main里面你打印的L是头节点,是空的,如果你想输出链表的话,应该写个循环来打印整个链表
该回答引用GPTᴼᴾᴱᴺᴬᴵ
您好,根据您提供的代码,我发现您并没有执行 ListInsert、LocateElem、ListDelete 等操作,只执行了 CreatList_H 和 Print 操作。您可以尝试在 main 函数中加入其他操作,例如:
ListInsert(L, 2, 10); // 在第 2 个位置插入元素 10
Print(L); // 打印链表
LNode *p = LocateElem(L, 10); // 查找元素 10 所在节点
if (p != NULL) {
cout << "元素 10 所在节点地址为:" << p << endl;
} else {
cout << "未找到元素 10" << endl;
}
ListDelete(L, 2); // 删除第 2 个位置的元素
Print(L); // 打印链表
执行上述代码后,您应该能够看到链表的插入、查找、删除等操作结果。希望能帮助到您!