
头插法中(*L)->next = NULL不太理解
voidCreateListHead(LinkList*L,intn){LinkListp;inti;srand(time(0));//随机产生数*L=(LinkList...
void CreateListHead(LinkList * L,int n)
{
LinkList p;
int i;
srand(time(0)); //随机产生数
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL; //先建立一个带头结点的单链表
for (i=0;i<n;i++)
{
p = (LinkList)malloc(sizeof(Node)); //生成新结点
p->data = rand()%100+1; //随机生成1001以内的数字
p->next = (*L)->next;
(*L)->next = p; //插入到表头
}
}
这是头插法 有个问题
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL; //先建立一个带头结点的单链表
先申请产生一个头结点,然后 (*L)->next = NULL; 我的意思是让头结点的next域为NULL,网上是说产生一个尾节点的意思 那这个*L指向尾节点(*L)->next = NULL; 这样才对啊,但是这里是头指针 指向头结点的呀。。。谁可以详细的解释一下吗 ?谢谢 展开
{
LinkList p;
int i;
srand(time(0)); //随机产生数
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL; //先建立一个带头结点的单链表
for (i=0;i<n;i++)
{
p = (LinkList)malloc(sizeof(Node)); //生成新结点
p->data = rand()%100+1; //随机生成1001以内的数字
p->next = (*L)->next;
(*L)->next = p; //插入到表头
}
}
这是头插法 有个问题
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL; //先建立一个带头结点的单链表
先申请产生一个头结点,然后 (*L)->next = NULL; 我的意思是让头结点的next域为NULL,网上是说产生一个尾节点的意思 那这个*L指向尾节点(*L)->next = NULL; 这样才对啊,但是这里是头指针 指向头结点的呀。。。谁可以详细的解释一下吗 ?谢谢 展开
2个回答
展开全部
这里是构建链表的基本过程,如果没有插入元素的时候,只有一个头指针,我们也称它为头节点,那尾指针就是头指针->next,,当插入元素的时候,其实是有个过渡环节,让插入的元素的next指向尾指针,然后让原先尾指针的位置(其实也是头指针的next)指向插入的元素。这样子元素就插进链表里了。这个过程可以只用一个结构块表示插入,否则你需要两个结构来表示插入的动作。请参考。
更多追问追答
追问
不对啊 ,头指针是头指针,头结点是头结点,两个概念,况且 单链表里没有尾指针!
追答
有两种表达方式,一种是头指针就是一个指针,不含数据,但我们完全可以认为包含头指针和数据的结构块为头指针,这在链表的理解里是没有问题的,尾指针就是空指针,不含数据或数据为空,也可以通过节点构造。在数据结构里这些并不完全统一。

2025-08-07 广告
广州赛恩科学仪器有限公司(原中大科仪)始创于2002年,是全球领先的精密测量仪器供应商和微弱信号检测方案提供商。公司以锁相放大器为核心产品,陆续推出光学斩波器、源表、功率放大器、电化学工作站、电流源等一系列产品。赛恩科仪推出的锁相放大器,覆...
点击进入详情页
本回答由赛恩科仪提供
展开全部
因为 “先申请产生一个头结点” 其实就是建立一个带头结点的 空 单链表,而一个带头结点的 空 单链表,其头结点也就是尾结点。因此,以后插入新结点(p)就简单了:
p->next = (*L)->next;
(*L)->next = p; //插入到表头
p->next = (*L)->next;
(*L)->next = p; //插入到表头
追问
额 还有有点疑问 如果头结点作为了尾结点 ,那么谁来做头结点呢,头插法是插在头结点与前一新结点之间的呀
追答
链表为空时,头结点也是尾结点。头插法是插在头结点之后插入新结点,没有矛盾啊。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询