在写图的邻接矩阵转化为图的邻接表存储时,碰到了一个问题,为每个节点建立好VNode之后,每个节点的ArcNode无法正确建立。在调试的过程中,发现程序有新建节点的操作,但是没有与之前的链表指针关联,这个问题本质上是线性表的建立问题。
寻找程序的错误,发现首先是新建操作的p节点没有回到起始位置,也就是没有保存头结点,在一次遍历完成后,给每个VNode节点赋值的是最后的p为NULL的内存。
所以想办法新建变量保存头指针。接下来是新建了head指针和p指针。
head = null
p = head
我天真的以为对p的变量的操作会反映到head指针,但是结果同上面的一样,head仍然为null。将p变为二级指针仍然如此。
网上正常的做法是将在结尾增加节点看做插入节点。
总结原因如下:
使用一级指针的时候,p的内容是null,p便是在内存里新开了一段内存,这样的操作当然无法放映到head上面。
使用二级指针时,我认为p的改变会导致head的改变并没有错,但是我忽略了p的每一次改变都会反映到head上,所以最终的结果仍然是,内存都建立了,但是还是找不到头指针