单链表的头部插入

tomatobin 2011-03-25 08:15:32
typedef struct node
{ datatype data;
struct node *next;
} LNode,*LinkList;
LinkList Creat_LinkList1( )
{//设L是带头结点的单链表
LinkList L=NULL;/*空表*/
LNode *s;
int x; /*设数据元素的类型为int*/
scanf("%d",&x);
while (x!=flag)
{ s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=L; L=s;
scanf ("%d",&x);
}
return L;
}
int Length_LinkList1 (LinkList L)
{//设L是带头结点的单链表
LNode * p=L; /* p指向头结点*/
int j=0;
while (p->next)
{ p=p->next; j++; } /* p所指的是第 j 个结点*/
return j;
}

如果我直接输入x=-1的时候,表的长度不就不能计算出来了?为什么书上说是建立了带头结点的链表呢?
...全文
284 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomatobin 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 newfarmerchi 的回复:]
从你的函数LinkList Creat_LinkList1( )里可以看到最后生成的节点为头结点,它里面
是包含一个数值的(不是最后的flag), 所以计算链表的长度时应该头结点开始,即在
函数Length_LinkList1 (LinkList L)中,while 的括号里面不应该是p->next,
而是p, 即 while (p)。如果想要一个不带值的头结点,应该在Creat_LinkL……
[/Quote]

原来如此,多谢了,flag是全局变量 -1
purewqk 2011-03-25
  • 打赏
  • 举报
回复
如果只看你这点程序而言,你的单链表并不是带头结点的。程序中并没有为头结点申请空间...
newfarmerchi 2011-03-25
  • 打赏
  • 举报
回复
从你的函数LinkList Creat_LinkList1( )里可以看到最后生成的节点为头结点,它里面
是包含一个数值的(不是最后的flag), 所以计算链表的长度时应该头结点开始,即在
函数Length_LinkList1 (LinkList L)中,while 的括号里面不应该是p->next,
而是p, 即 while (p)。如果想要一个不带值的头结点,应该在Creat_LinkList1( )
里,在退出while循环后,(在return L; 之前)加上s=(LNode *)malloc(sizeof(LNode));
s->next=L; L=s;这样就生成了传统意义上的头结点。在Length_LinkList1 (LinkList L)中
使LNode * p=L->next; /* p指向头结点的下一个*/用while (p)就可以计算长度了。
hoomey 2011-03-25
  • 打赏
  • 举报
回复
while (x!=flag)
这里的flag是全局变量?
flag的值是-1吗
jixingzhong 2011-03-25
  • 打赏
  • 举报
回复
对于带头结点的链表,当链表内容为空时,也会有一个头结点存在。
無_1024 2011-03-25
  • 打赏
  • 举报
回复
头结点只是一个自己的约束
pengzhixi 2011-03-25
  • 打赏
  • 举报
回复
你那个flag的值为多少

69,336

社区成员

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

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