本blog是记录数据结构链表部分的一个我犯过的逻辑问题。
如图,输入一组数据,以-1作为结尾且不接收-1,
以链表的形式储存并逆向遍历输出。
逻辑如下图
由于要求逆向输出,我本能的选择在接收数组的时候提前将数据反转。但结果却使我困惑于输出的结果。于是从逻辑入手,第一次循环产生链表确实会产生如我所预想的结果,但第二次的加入的结点却出现在head与第一个temp中间,第三次会出现在head与第二个temp中间,最终导致输出结果的错误。我有考虑过移动head能否解决问题,但我发现head更像是链表的一个产生结点的索引,移动到哪里都无法让我满意。最终的解决方法还是落在了head上,只要最开始的时候不给head赋值就不会出现想要移动head去无法如愿的情况。当跳出固有的“head应该有值”的思维后,问题就清楚了许多。如上所言,head就是发挥一个找到生成结点的位置的作用。只是正因为如此,正序输入的链表实际上一直接在head后面,当从head遍历的时候,结果本身就是逆序的。而我最开始的刻板思维认为结果的输出逆序就应该在接收数组的时候逆序接收,由此导致了head自身是最后一个接收的数,但之后的输出顺序反而是正序的接收数。
关键点:
1、链表的head不予以赋值,本身只是起到确认新建结点位置的作用。
2、head后的链表储存顺序是逆序储存,即先进后出
谨以此blog记录一次链表的相关问题,同时警示自己勿要抓着刻板印象不放,相信自己的逻辑判断。