面试知识点--链表如何逆转

这个问题应该是面试最常见的题型之一了,很多大公司都会经常提问,如阿里巴巴。它的原理简单,学过数据结构,C语言,熟悉链表的同学应该很容易就掌握。但如果不熟练的话,也容易把代码写复杂了,或者写不出来。

下面我带大家分析一下这个算法。

先定义一个链表节点,

面试知识点--链表如何逆转_第1张图片

这个节点结构很简单,有一个整数值,一个指向下个节点的指针。ListNode(int v) : val(v), next(NULL) {}是C/C++常用的初始化方法,这个可以看做是ListNode结构的构造函数,val(v)是对val初始化,next(NULL)对next进行初始化,这种初始化速度比较快。

面试知识点--链表如何逆转_第2张图片

我们采用new来创建,使用C++来实现。创建完成后,生成一个单链表,共有4个元素。

面试知识点--链表如何逆转_第3张图片

我们看一下这个循环的执行过程,为方便理解,我这里画了一下循环执行图,

1、初始状态


面试知识点--链表如何逆转_第4张图片

2、第一次循环执行后


面试知识点--链表如何逆转_第5张图片

3、第二次循环执行后


面试知识点--链表如何逆转_第6张图片

4、第三次循环执行后


面试知识点--链表如何逆转_第7张图片

5、第四次循环执行后


面试知识点--链表如何逆转_第8张图片

6、最终状态


面试知识点--链表如何逆转_第9张图片
面试知识点--链表如何逆转_第10张图片

显示函数:

面试知识点--链表如何逆转_第11张图片

删除函数:

面试知识点--链表如何逆转_第12张图片

我们看到执行结果如下所示,

init List is:

0 1 2 3

reverse List is:

3 2 1 0

以上就是链表逆转的典型写法,大家都明白了吗?如有因为欢迎留言交流。

另外, 链表还可以使用递归的方式实现,如下是递归实现的方法,有兴趣的也可以研究一下它的实现逻辑。

面试知识点--链表如何逆转_第13张图片

本文参考了如下文章链接:

https://www.cnblogs.com/kaituorensheng/archive/2014/01/18/3524888.html

http://blog.csdn.net/worldwindjp/article/details/18861093

对以上文章的作者表示感谢。


面试知识点--链表如何逆转_第14张图片

欢迎您扫一扫上面的微信公众号,订阅我的个人公众号!本公众号将以推送Android各种碎片化小知识或小技巧,以及整理Android面试知识点为主,也会不定期将开发老司机日常工作中踩过的坑,平时自学的一些知识总结出来进行分享。每天一点干货小知识把你的碎片时间充分利用起来。

你可能感兴趣的:(面试知识点--链表如何逆转)