不带头结点的单链表的问题

时间一粒 2010-05-10 06:00:56
弄了一个下午,太差劲了!高手帮忙修正一下!
谢谢~

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define OK 1
#define OVERFLOW -2
#define ERROR 0

typedef int ElemType;
typedef int Status;

typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
///创建链表
Status CreateList(LinkList &L,int n)
{
int i;
L=(LinkList)malloc(sizeof(LNode));
if(!L)exit(ERROR);
L->data=n;
L->next=NULL;
printf("Please input numbers:\n");
for(i=0;i<n;i++)
{
scanf("%d",&L->data);
L=(LinkList)malloc(sizeof(LNode));
L->next=L;
}
return OK;
}
///输出元素
Status PrintList(LinkList L)
{
printf("The numbers are:");
while(L->next)
{
L=L->next;
printf("%d ",L->data);
}
printf("\n");
return OK;
}

//主函数
int main()
{
int n;
ElemType e;
LinkList L;
printf("Please input the number you need:");
scanf("%d",&n);
CreateList(L,n);
PrintList(L);
system("pause");
}
...全文
347 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
avecparapluie 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 hhbgk 的回复:]
弄了一个下午,太差劲了!高手帮忙修正一下!
谢谢~

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define OK 1
#define OVERFLOW -2
#define ERROR 0

typedef int ElemType;
typedef int Status;

typedef s……
[/Quote]

这个没有头结点了


#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define OK 1
#define OVERFLOW -2
#define ERROR 0

typedef int ElemType;
typedef int Status;

typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//创建链表
//Status CreateList(LinkList &L,int n)
Status CreateList(LinkList *L,int n) /*注意改动*/
{
int i,j; /*注意改动*/
(*L)=(LinkList)malloc(sizeof(LNode));/*注意改动*/
if(!(*L))exit(ERROR); /*注意改动*/
(*L)->data=n /*注意改动*/
(*L)->next=NULL; /*注意改动*/
LinkList p=*L /*注意改动*/
LinkList q=*L; /*注意改动*/
printf("Please input numbers:\n");
for(i=1;i<n;i++)
{

p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&j); /*注意改动*/
p->data=j; /*注意改动*/
p->next=q; /*注意改动*/
q=p; /*注意改动*/
}
*L=p; /*注意改动*/
return OK;
}
///输出元素
Status PrintList(LinkList L)
{
printf("The numbers are:");
while(L) /*注意改动*/
{
//L=L->next;
printf("%d ",L->data);
L=L->next;
}
printf("\n");
return OK;
}

//主函数
int main()
{
int n;
// ElemType e;
LinkList L=NULL;
printf("Please input the number you need:");
scanf("%d",&n);
CreateList(&L,n); /*注意改动*/
PrintList(L);
system("pause");
return 0;
}

时间一粒 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 avecparapluie 的回复:]
引用楼主 hhbgk 的回复:
弄了一个下午,太差劲了!高手帮忙修正一下!
谢谢~

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define OK 1
#define OVERFLOW -2
#define ERROR 0

typedef int ElemType;
typedef int Sta……
[/Quote]
呵呵~我后来弄好了,一些东西就是要逼迫自己才能做出来!不过,还是谢谢!
十八道胡同 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hhbgk 的回复:]

引用 2 楼 lcl_data 的回复:
scanf("%d",&amp;L->data);
L=(LinkList)malloc(sizeof(LNode));

L->next=L; //这里的L会产生混乱,到底是新产生的还是链表末尾的?

scanf("%d",&amp;L->data);
LinkList p=(LinkList)malloc(sizeof(……
[/Quote]
你按照这个思想去该,主要就是这里
时间一粒 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huanmie_09 的回复:]
C/C++ code

#include<stdio.h>
#include<stdlib.h>

#define OK 1
#define OVERFLOW -2
#define ERROR 0

typedef int ElemType;
typedef int Status;

typedef struct LNode{
ElemType data;
st……
[/Quote]
貌似还是有头结点!
时间一粒 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lcl_data 的回复:]
scanf("%d",&L->data);
L=(LinkList)malloc(sizeof(LNode));

L->next=L; //这里的L会产生混乱,到底是新产生的还是链表末尾的?

scanf("%d",&L->data);
LinkList p=(LinkList)malloc(sizeof(LNode));
L->next=p;
L=p; }
……
[/Quote]
不行!陷入死循环~~~~~
huanmie_09 2010-05-10
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>

#define OK 1
#define OVERFLOW -2
#define ERROR 0

typedef int ElemType;
typedef int Status;

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

///创建链表
Status CreateList(LinkList &L,int n)
{
int i;
LinkList p, q;
L=(LinkList)malloc(sizeof(LNode));
if(!L)
exit(ERROR);
L->data=n;
L->next=NULL;
printf("Please input numbers:\n");
for(i=0;i<n;i++)
{
//scanf("%d",&L->data);
//L=(LinkList)malloc(sizeof(LNode));
//L->next=L;

p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next = L->next;
L->next=p;
}
return OK;
}

///输出元素
Status PrintList(LinkList L)
{
printf("The numbers are:");
//while(L->next)
while(L)
{
printf("%d ",L->data);
L=L->next;
//printf("%d ",L->data);
}
printf("\n");
return OK;
}

//主函数
int main()
{
int n;
ElemType e;
LinkList L;
printf("Please input the number you need:");
scanf("%d",&n);
CreateList(L,n);
PrintList(L);
system("pause");
}
jiuchang 2010-05-10
  • 打赏
  • 举报
回复
不带头节点,需要一个指针来指向开始节点
LinkList head = NULL;

在创建链表的时候,接错了
LinkList tmp = (LinkList)malloc(sizeof(LNode));
tmp->next = L;
L->next=tmp;
这是把新节点接在头指针后面
如果要把新节点接在尾巴上,则还需要一个尾指针来指向最后一个节点
LinkList tail = head;
在create中
LinkList tmp = (LinkList)malloc(sizeof(LNode));
tail->next = tmp;
tail = tail->next;

当然申请内存后应该加判断
十八道胡同 2010-05-10
  • 打赏
  • 举报
回复
scanf("%d",&L->data);
L=(LinkList)malloc(sizeof(LNode));

L->next=L; //这里的L会产生混乱,到底是新产生的还是链表末尾的?

scanf("%d",&L->data);
LinkList p=(LinkList)malloc(sizeof(LNode));
L->next=p;
L=p; }

时间一粒 2010-05-10
  • 打赏
  • 举报
回复
是创建一个单链表L,要不带头结点的。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧