当前位置:网站首页 > 区块链基础 > 正文

单向链表逆序输出(单链表的逆序输出)



               最近在学习链表,看到书上说可以采取每次在链表头部插入新增节点的方法,将链表逆序,也就是建立的链表节点内容与数据的输入顺序相反。我便来了兴趣,想着试试看,结果没搞懂,于是开始百度。看了几遍博客后终于是明白了,而后写作的兴趣又上来了。。。。一个初学者就算再怎么来了兴趣,也不可能写得很好,所以有不对的地方,欢迎大家指出!顺便这里附上一篇写得很好的博客:点击蓝色字体。我正是看了这篇博客才大概弄懂了链表逆序,还自己手画链表才理解的。

                博主要讲的单链表逆序有5种(感觉不止,但是博主只会5种):

        简单的说一下这个方法的思路吧:其实很简单,就是通过链表的遍历,将链表中的数据一一赋值给一个数组。然后控制下标进行输出。

         我看了几篇博客,发现他们都是用自定义的函数来介绍链表逆序的,这对初学者有些不友好(问就是我是初学者),所以我直接这里就拿一个最简单的动态链表运用来举例子,直接上代码:

 

      简单介绍下malloc()函数:malloc()括号内就是指开辟空间的大小,只是为了完美的开辟一个不大不小,刚好合适的空间,我们用sizeof()语句来获取已经定义的结构体的大小最后就是malloc()函数返回的数据类型是(void*),所以我们在运用时要进行类型的强制转换,也就是在前面加上(node*)(node*是我定义的结构体的类型)

最后说一下这种方法的缺点:学过链表的都知道,链表与数组相比,最大的优势就是可以动态分配内存空间。所以这个方法的缺点就是太浪费空间。链表是可以无限输入输出的,但是通过数组来进行逆序输出,再无限也变得有限了,因为我们不知道输入的数据有多少个,只能提前定义一个比较大一点的数组来进行逆序。而数据少了,浪费空间;数据多了,数组空间不足。

        如下图,这是一个单链表,上面是数据域,下面书指针域,第一个节点就是头节点,最后一个节点的尾指针指向NULL。

这个方法就是用三个指针将图中每个节点二点指向反向(也就是箭头反指)。看图:

 这样,将每一个节点的指向反转。将逆序前的头指针指向空,最后就可以得到逆序的链表了,下面是实现代码(用的例子都是一样的,只是链表的逆序方法不同,就不像第一个方法那样打那么多注释了):

 

要理解上面的代码最重要的是(博主的个人理解):要理解   指针->next=    其实就是上面两个图中的箭头,指针指向谁,箭头就指向谁,因为单链表中每个节点都只能指向一个节点,将一个节点的指针指向一个新的节点,那这个节点原来指向的那个节点的箭头就自动断开。

还是得看图理解:

2

对于一条链表,从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,(N-1)次这样的操作结束之后就得到上图。

最后在将第一个节点连接到新表的结尾就完成链表的逆序了。

下面是实现代码:

 

                要用递归来进行逆序的话,就不得不使用自定义函数了:

 

直接看代码:

 

到此这篇单向链表逆序输出(单链表的逆序输出)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 怎么点击图片跳转链接(怎么制作图片链接跳转)2024-12-23 18:45:10
  • 单向链表冒泡排序(单向链表 排序)2024-12-23 18:45:10
  • b站怎么弄视频链接(b站视频链接怎么用)2024-12-23 18:45:10
  • 链接跳转工具(跳转链接制作)2024-12-23 18:45:10
  • 天气预报链接(天气预报专业版)2024-12-23 18:45:10
  • cp1300怎么链接电脑(cp1300如何连接wifi打印)2024-12-23 18:45:10
  • 腾讯文档 链接(腾讯文档链接怎么生成)2024-12-23 18:45:10
  • 单向链表排序(单向链表排序算法)2024-12-23 18:45:10
  • 单链表和双向链表的区别(单链表和双向链表的区别和联系)2024-12-23 18:45:10
  • 短链接防红跳转(短链接跳转浏览器)2024-12-23 18:45:10
  • 全屏图片