数据结构单链表中关于空指针的理解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Curry_On/article/details/82996137

数据结构单链表中关于空指针的理解

直接上题目:

h 为不带头结点的单链表的头指针,现在需要将 x 结点插入到单链表的最后,作为最后一个结点,要求写出相应的算法。

这是一道非常基础的题目,我写的算法如下:

while( h ){
     h = h -> next ;
}
h = s ;
s -> next = null ;

写完之后觉得很简单嘛,自我感觉良好,乍一看好像也没什么问题。思路是对的,先循环找到单链表的最后一个结点,然后再让最后一个结点指针域中的指针指向 x 结点,最后把 x 结点的指针域改为NULL ,这样一来 x 结点就是最后一个结点了。

结果是:我的算法是错误的,从循环开始就已经错了。错误分析如下:

当 h 不为空时,循环进行,h 不停地往链表的下一个结点指,当 h 指向最后一个结点时候,循环执行最后一次,执行完后应该要注意到 h 此时是一个空指针!它不指向任何结点,可以理解为它已经脱离了这个链表,和链表已经没有关系了,所以再执行 h = s 已经没有任何意义。所以算法应该修改为:

while( h->next ){
	h = h->next ; 
} 
h->next = s;   // 让最后一个结点指针域中的指针指向 x 结点
s->next = null;   // 将 x 结点改为最后一个结点

这个题目加深了我对单链表指针操作的印象以及对空指针的理解,以上仅为一个数据结构初学者在学习过程中的一些浅显的理解,错误的地方还请大家及时指正,也欢迎大家一起探讨交流!

猜你喜欢

转载自blog.csdn.net/Curry_On/article/details/82996137