关于数据结构单链表头结点是否可以用指针替换?

发布于 2022-09-04 20:15:54 字数 529 浏览 11 评论 0

单链表定义时要声明一个头结点,但是这个头结点的data域是不使用的,只用其next域,那么这个头结点和一个普通指针有何区别?浪费了一个data域的空间?
我的想法是直接用一个指针作为头结点,原先的头结点作为存储数据的第一个单元。
头结点定义:
LinkList h;
这个h所指向的是头结点,按照书本和老师讲的规定是不储存数据,就用到一个next域,现在,我让这个data域也起作用,储存数据,h这个指针本身作为头结点。
当头结点空时
原:h->next=NULL;
现:h=NULL;

插入数据时,
原:

p=(LNode*)malloc(sizeof(LNode));
p->data=e;
h->next=p;

现:

p=(LNode*)malloc(sizeof(LNode));
p->data=e;
h=p;

其他操作以此类推。

我想问一下我这个想法有没有问题,想搞清楚,问了老师也没怎么说清楚,求解。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

楠木可依 2022-09-11 20:15:54

如果不用空的header节点的话,要修改头节点,函数需要传入header的地址而不是header本身(header此处已经是指针,也就是说要传入指针的指针)。
比如,

LNode *h, *p;

/* 从第一个节点开始删除 */
void del_front(Node** header) 
{
    ...
}

p=(LNode*)malloc(sizeof(LNode));
p->data=e;
h=p;

del_front(&h);

在上面这个例子中,你删除了老的头结点,那么新的头结点地址也就变了,也就是说h的值也应该跟着变。要改变指针的值,你只传入指针h给函数的话是不能修改h的值的(这是值传入),我们需要通过给函数传入指向指针的指针才能修改h的值,因此这么做就比较麻烦。

如果是将头结点作为特殊节点的话,我们即使从第一个节点开始删除,我们只需要传入头结点h给删除的函数,然后这个函数修改h->next就能解决问题了。所以这么做,维护性应该是要好些的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文