C++怎么确定一个链表是否是空的?

来源:百度知道 编辑:UC知道 时间:2024/06/10 08:07:23
在程序中,我想用一个链表.但是在使用前,我想知道这个链表是不是空的.
我应该怎么处理这个问题??
这个能判断链表是不是空的的信息一定要包括在这个表里而.
这个起来链表的头一个结点所保存的信息可以不同于链表后面的其他对点所保存的信息.比如说头一个对点保存的信息可以是这个链表的长度\个数等等信息.
链表中保存的信息最好不要是什么INT 型的或是CHAR型单个的信息.最好能是一个结构体.

下面是定义的结构体信息和一个链表的结点形式.
对下面的定义最好不要进行更改.如果更改了一点也行.
最好是能够在了Microsoft Visual C++上运行好了的程序.
如果可以最好还能加上一些注释(关键的部分一定要有).

typedef struct M_cargo{
int M_num;
char M_name[20];
int M_stocks;
char M_stock_date[7];
char M_provider[20];
}Mcargo;
typedef struct M_node{
struct M_node *next;
Mcargo Mc;
}*MList;

谢谢您的帮忙!!!!!!!
答案通过可以另外多加分!!!!!!!!!!!

链表区分带头节点和不带头结点两种。假定链表节点指向下一节点的指针变量名为next。那么区分情况,判断空链表的方法为:

1 带头节点。
对于带头节点的链表,存在有不变的头结点head,这个节点并不保存任何数据,仅提供链表起始的一个标识。对于此类链表,判断为空的条件为head->next==NULL。当head的next值为NULL,这时链表为空。

2 不带头结点。
不带头结点的情况,链表的起始节点是可能变化的,但无论如何变化,必须有一个节点指针类型的变量保存实际上的第一个节点first。
当first为空时,链表即为空。这时判断为空的条件为first==NULL。

//解决这种问题很简单,如果链表带头结点的话,那么判空就是 p=head->next; p == NULL
如果不带头结点的话 那么就是 head == NULL
按照你题目的要求那么就是带有头结点。

下面我给你写个创建链表和打印链表的程序。

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

typedef struct M_cargo
{
int M_num;
char M_name[20];
int M_stocks;
char M_stock_date[7];
char M_provider[20];
}Mcargo;

typedef struct M_node
{
struct M_node *next;
Mcargo Mc;
}*MList;

void CreateLink(MList L)
{
MList p, q;
M_cargo Mc;

printf("请输入结点号[-1]退出:");
scanf(&quo