话不多说,我们先来看看我们的单链表

大致的思路是将下一个指针插入到头结点的后面,比如【1,2,3】就会变成【2,1,3】再接着变成【3,2,1】
接下来我们看看图来帮助我们理清指针的指向
这里我们需要引入一个工作指针 *p,指向的就是【下一个结点】(黄色笔迹表示新的操作)这里将头结点置空可以认为是后续步骤的统一

整理一下这个图就会变成这样,我们能够看出来其实指针p是断链后防丢的,而p的“前一个结点”实际上就是逆序后的最后一个结点,其next指针为空

接下来看我们第一个倒置
先引入第二个工作指针 *q,它会接替p的位置好让p可以去指向下一个结点,然后q这个结点的next会接上前一节链表最后一个结点的指向(上一个指向NULL ,然后前一节的链表会接上当前结点也就是q的指向

图乱?没事我们理一理

啊这里要迷惑了,这不是跟原来的一样🐎,就除了断成两截???
我也迷惑过,我们接着看就是了
我们照之前的操作再重复一遍(链表就是循环循环循环操作 我们让

本文详细介绍了如何通过指针操作实现单链表的逆序。通过使用两个工作指针p和q,逐步将链表节点倒置,直至p为空,解释了为何必须从头结点开始操作,并讨论了特殊情况如空链表的处理。最后,文章提到了在VC6.0环境下运行的代码实现。

1771

被折叠的 条评论
为什么被折叠?



