23张图!万字详解「链表」,从小白到大佬! (5)

LeetCode 验证结果如下图所示:

image.png


可以看出这种实现方法在执行效率方面已经满足我们的需求了,性能还是很高的。

实现方法 3:循环

我们也可以通过循环的方式来实现链表反转,只是这种方法无需重复调用自身方法,只需要一个循环就搞定了,实现代码如下:

class Solution { public ListNode reverseList(ListNode head) { if (head == null) return null; // 最终排序的倒序链表 ListNode prev = null; while (head != null) { // 循环的下个节点 ListNode next = head.next; // 反转节点操作 head.next = prev; // 存储下个节点的上个节点 prev = head; // 移动指针到下一个循环 head = next; } return prev; } }

LeetCode 验证结果如下图所示:

image.png


从上述图片可以看出,使用此方法在时间复杂度和空间复杂度上都是目前的最优解,比之前的两种方法更加理想。

总结

本文我们讲了链表的定义,它是由数据域和指针域两部分组成的。链表可分为:单向链表、双向链表和循环链表,其中循环链表又可以分为单循链表和双循环链表。通过 JDK 的源码可知,Java 中的 LinkedList 其实是双向链表,我们可以使用它来实现队列或者栈,最后我们讲了反转链表的 3 种实现方法,希望本文的内容对你有帮助。

如果觉得有用请各位老爷多多点赞和分享,原创不易,谢谢您了!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspjgw.html