小灰 程序员小灰

​漫画:如何将一个链表“逆序”?_Java

​漫画:如何将一个链表“逆序”?_Java_02



—————  第二天  —————



​漫画:如何将一个链表“逆序”?_Java_03

​漫画:如何将一个链表“逆序”?_Java_04

​漫画:如何将一个链表“逆序”?_Java_05

​漫画:如何将一个链表“逆序”?_Java_06


​漫画:如何将一个链表“逆序”?_Java_07


​漫画:如何将一个链表“逆序”?_Java_08



​漫画:如何将一个链表“逆序”?_Java_09

​漫画:如何将一个链表“逆序”?_Java_10

​漫画:如何将一个链表“逆序”?_Java_11


(现实里的小灰在刚入行的时候,面试官也问了我这个问题,当时小灰就傻傻的问面试官是单链表还是双链表?然后就没然后了......)


————————————



​漫画:如何将一个链表“逆序”?_Java_12

​漫画:如何将一个链表“逆序”?_Java_13

​漫画:如何将一个链表“逆序”?_Java_14


​漫画:如何将一个链表“逆序”?_Java_15


​漫画:如何将一个链表“逆序”?_Java_16


​漫画:如何将一个链表“逆序”?_Java_17



​漫画:如何将一个链表“逆序”?_Java_18


​漫画:如何将一个链表“逆序”?_Java_19


​漫画:如何将一个链表“逆序”?_Java_20



​漫画:如何将一个链表“逆序”?_Java_21


​漫画:如何将一个链表“逆序”?_Java_22


让我们从链表头部开始,建立三个临时节点的引用,分别为p1,p2,p3。它们分别指向头节点、第二个节点、第三个节点。


​漫画:如何将一个链表“逆序”?_Java_23


实现链表逆序的完整步骤如下:


1.以p2节点为视角,把p2节点原本指向p3的next指针倒转,指向p1。


​漫画:如何将一个链表“逆序”?_Java_24


2.三个临时节点引用p1,p2,p3分别向后移动一格位置。


​漫画:如何将一个链表“逆序”?_Java_25



3.重复第1步的工作,以p2节点为视角,把p2节点原本指向p3的next指针倒转,指向p1。


​漫画:如何将一个链表“逆序”?_Java_26


4.重复第2步的工作,三个临时节点引用p1,p2,p3分别向后移动一格位置。


​漫画:如何将一个链表“逆序”?_Java_27



.......

.......


5.继续像这样子迭代下去,一直到p2是空为止。


​漫画:如何将一个链表“逆序”?_Java_28


6.最后,把head节点的next指向空,成为逆序链表的尾节点。并且把p1赋值给head,让p1所在的节点成为逆序链表的头节点。


​漫画:如何将一个链表“逆序”?_Java_29

​漫画:如何将一个链表“逆序”?_Java_30

​漫画:如何将一个链表“逆序”?_Java_31


​漫画:如何将一个链表“逆序”?_Java_32​漫画:如何将一个链表“逆序”?_Java_33

链表反转的逻辑本身,都在reverseLinkedList方法当中。在这里我们把链表的头节点作为了静态成员,实际上也可以作为方法参数传入,只是逻辑上需要一些小小的修改。

​漫画:如何将一个链表“逆序”?_Java_34


​漫画:如何将一个链表“逆序”?_Java_35


​漫画:如何将一个链表“逆序”?_Java_36



如果喜欢本文,请给个好看,觉得特别喜欢,请转发给你的朋友们。