关于数据结构单链表头结点是否可以用指针替换?
单链表定义时要声明一个头结点,但是这个头结点的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果不用空的header节点的话,要修改头节点,函数需要传入header的地址而不是header本身(header此处已经是指针,也就是说要传入指针的指针)。
比如,
在上面这个例子中,你删除了老的头结点,那么新的头结点地址也就变了,也就是说h的值也应该跟着变。要改变指针的值,你只传入指针h给函数的话是不能修改h的值的(这是值传入),我们需要通过给函数传入指向指针的指针才能修改h的值,因此这么做就比较麻烦。
如果是将头结点作为特殊节点的话,我们即使从第一个节点开始删除,我们只需要传入头结点h给删除的函数,然后这个函数修改h->next就能解决问题了。所以这么做,维护性应该是要好些的。