要求很简单,输入一个链表,反转链表后,输出新链表的表头。
反转链表是有2种方法(递归法,遍历法)实现的,面试官最爱考察的算法无非是斐波那契数列和单链表反转,递归方法实现链表反转比较优雅,但是对于不了解递归的同学来说还是有理解难度的。
递归法
总体来说,递归法是从最后一个Node开始,在弹栈的过程中将指针顺序置换的。
为了方便理解,我们以 1->2->3->4这个链表来做演示。输出的效果是4->3->2->1
首先定义Node:
public static class Node {
public int value;
public Node next;
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">Node</span><span class="hljs-params">(<span class="hljs-keyword">int</span> data)</span> </span>{
<span class="hljs-keyword">this</span>.value = data;
}