大家看数据结构中 头插法和尾插法,,为什么尾插法要设置最后一个节点为空,而头插法不用????????

listtailcreat(list*&l){list*p,*q;l=(structlist*)malloc(sizeof(list));l->next=NULL;q=l... list tailcreat(list *&l)
{
list *p,*q;
l=(struct list *)malloc(sizeof(list));
l->next=NULL;
q=l;
for(int i=0;i<10;i++)
{
p=(list *)malloc(sizeof(list));
p->data=i;
q->next=p;
q=p;
}
p->next=NULL;
}
linlist tcreat(linlist &l)
{
linlist p;
l=(list *)malloc(sizeof(list));
l->next=NULL;
for(int i=0;i<10;i++)
{
p=( list *)malloc(sizeof(list));
p->data=i;
p->next=l->next;
l->next=p;
}
}
展开
 我来答
wangnasa
2012-09-27 · TA获得超过776个赞
知道小有建树答主
回答量:732
采纳率:100%
帮助的人:632万
展开全部
首先说头插法是在链表的开始插入节点,所以他必有后继 所以要设置其起后继指针为插入前的头结点。
而 尾插法是在链表的尾部插入节点所以修改原链表的尾部的后继指针为新节点 而新节点以是尾部无后继结点 所以尾插法的节点后继为NULL
更多追问追答
追问
起后继指针为插入前的头结点??那么建立的新表不就没有头结点了吗??
追答
那要看你的链表是哪种类型的 有的头是一个独立的头 那样你插入的时候就是插入在独立的头的后面这样仅当链表为空时 头插法插入的结点尾部是NULL 其他情况下都不是NULL。这链表的好处是每次插入节点不用修改对头指针的指向。
另一中没有独立的头 那就是说链表至少有一个节点 这样每次头插入法插入的节点都是 链表的头节点 每次插入都要修改 对头指针的指向。
478675812
2012-09-27 · 超过22用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:51.7万
展开全部
尾插法每次插入的节点为链表的当前的最后一个节点,无后继,故为null,
头插法插入的节点是插入当前链表的头部,即其后继为当前链表的首元结点,故须指向该首元结点,所以不能为空
追问
p->next=l->next;
l->next=p;
这个函数是将p插入头结点之后啊??尾部 不就不为空了??????
追答
p->next=l->next;
l->next=p;

这两条语句是头插法,所以不为空,你的头插法和尾插法概念理解反了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
步行者way
2012-09-27 · TA获得超过218个赞
知道小有建树答主
回答量:199
采纳率:100%
帮助的人:172万
展开全部
循环前:
只有一个头结点l

循环第一次:
p->next=l->next=NULL; //头插法,因此第一次循环的节点p作为链表的最后一个节点的p->next=NULL
l->next=p; //l的下一个节点为p

循环第二次:
p->next=l->next; //注意此时l->next是第一次插入的节点p,l->next作为本次插入节点的下一个节点,即相当于在前面插入了一个节点
l->next=p;

注意:
每次插入节点类似于这种情形:每次在头节点 l 和链表的第一个节点(l->next) 之间插入一个新节点p
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式