在c语言链表中在为什么先要把链表的头节点和尾节点都置成NULL呢?

如题所述

不会吧?一般只会把尾节点置成NULL,
作为链表结束标志,头置成NULL,还
怎么进去啊。代码贴来研究一下。追问

struct stu{
int num;
char name[10];
struct stu *stu *next;
};
struct stu * create()
{
chan;
struct stu *head,*tail,*now;
head=NULL;
taik=NULL;

now=(struct stu *)malloc(sizeof(struct stu));
printf("学号:");
scanf("%d",&now->num);
printf("姓名:");
scanf("%s",now->name);
now->next=NUL;
}
tint main (void)
{
struct stu *s=NULL;
s=create();
}程序有点写不开所以只写了个大体意思

追答

你好,我个人觉得哈:
应该是这样,注释掉的是我加的。
struct stu{
int num;
char name[10];
struct stu *stu *next;
};
struct stu * create()
{
chan;
struct stu *head,*tail,*now;
head=NULL;
taik=NULL; //这个感觉没用

now=(struct stu *)malloc(sizeof(struct stu));
//head = now;
printf("学号:");
scanf("%d",&now->num);
printf("姓名:");
scanf("%s",now->name);
now->next=NUL;
//return now
}
tint main (void)
{
struct stu *s=NULL;
s=create();
}

追问

输入完姓名之后后面的那个now->next=NULL是什么意思呢?

追答

申明:个人意见
我觉得这个函数仅用于创建一个链表头,
那么现在这个now就是第一个也是最后
一个节点,最后一个节点的next指针
是要指向NULL的,来标识链表尾。

抱歉,好像我理解错了。
create()函数里head 和tail指针都没用啊,
因为当create()函数返回的时候,head
和tail都消亡了啊,而且在函数体内也
都没有用到他们。所以他们可以都去掉。
仅留一个now指针,用来返回链表头。

追问

那尾节点用什么来表示呢?又怎样来表示这个链表已经结束了呢?

追答

当遍历链表的时候,
就是判断每个节点
的next是否为NULL
如果为NULL说明
已经到链尾了。

温馨提示:内容为网友见解,仅供参考
无其他回答

链表尾节点必须指向null吗
链表的最后一个节点可以指向null,也有可能指向该链表的头节点,关键看你实现的是什么类型的链表。单链表和双向链表最后都是指向null,因为在你实现链表的一些函数的时候,往往要判断是否已经到了链表最后,否则有些时候无法结束程序。而循环链表则有着不同的结构,形象点说循环链表有点像一串珍珠项链,首位...

为什么建立一个头结点的时候要使头结点的指针域为空
指针域里面保存的是指向下一个结点的指针,建立头结点的时候,一个元素也没有,所以头结点的指针域设为null,这样可以很方便的检测到链表是空的

C语言关于链表的问题
2.你的链表很有问题,链表不是这样写的 ,对于链表,要在他的尾指针处加上NULL,这样可以防止内存泄漏,3,程序要分层,比如,你对你的链表,你都没有办法检测这个链构建的对不对,应该在结构体后面至少分成两个函数,一个负责链表的初始化,另一个负责insert,但你把他们都放在一起了,这样对你定...

C语言链表每个节点最后都得free掉吗?还是只用free掉头指针就可以了...
链表的结点是用多个malloc来的,就要用多个free把它们全free掉

...为什么要定义 head啊...head = new node(null);之类的 不太明白...
一环扣一环, 但是总的有头有尾, 定义的head就是头 head = new node(null); 这里的意思就是head没有父节点了, 今后如果要判断一个节点是不是头节点,就判断他的父节点是不是为空, 为空就是父节点, 如果有父节点就证明他处于中间位置 同理没有子节点也就证明该节点是最后一个了.

C语言链表代码[顺序建立链表],为什么要使用tail,而不是直接head?[代码...
如果不要尾节点也是可以的,首先解释为什么可以,不要尾节点之后要怎么做:不要尾节点,通过头节点也是可以达到尾部的。但是如果需要在链表尾部加入数据,就需要从头开始遍历链表来达到尾部,然后再做上面代码中的操作把新节点放到尾部。这个是可以的,但是从一个设计者的角度来说,如果链表过长,比如10W+,...

C语言数据结构单链表初始化
你说的那个是逆序建立n个节点的链表,建完头结点后由于链表中没有其他节点就把头结点的next置为空,这一点如果不明白的话去看链表那一章,有介绍!!!之后从后往前建立链表!!刚开始是L->next =NULL 要注意p是每次新建的节点,这样从后往前以此建立链表,只要明白p是每次新建的节点,和从后往前...

C语言链表中的P!=NULL是不是指当指针P指到链表中的最后一个结点时结束...
是p指向最后一个节点的下一个节点循环才结束。因为最后一个节点 p不等于NULL,而最后一个节点的next为NULL,所以是最后一个节点的next。

c语言带空头结点的单链表删除 free(p)后为什么还要p==null
这是c语言的问题。其实楼上说的很清楚。free只是释放了p所指向的堆地址,p还是指向的这个地址。这个操作是让操作系统知道这片堆地址已经从原来的被占用,变成了可使用。这时候你其实还是可以用p去操作这个地址。但是这操作是不安全的。因为操作系统默认这片堆地址可以随意使用。当其他程序刚好调用这个地址...

c语言单链表:有头结点和无头结两种列表的区别以及创建和输出的区别...
在C语言中,单链表有头结点和无头结两种形式,它们在创建和输出操作上有所区别。首先,我们来区分头指针和头节点的概念:头指针,通常用来标识链表的起始位置,它本身并不是链表中的一个节点,而是一个指向链表中第一个节点的引用。相反,头节点则是链表中的第一个实际数据节点,它包含了链表的起始标识...

相似回答