关于单链表问题,输入输出

为什么创建单链表之后 的显示操作没有执行啊

#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); // 打印链表

执行上述代码后,您应该能够看到链表的插入、查找、删除等操作结果。希望能帮助到您!