首先,递归法代码如下:
public Node reverse(Node first)
{
if (first == null) return null;
if (first.next == null) return first;
Node second = first.next;
Node rest = reverse(second);
second.next = first;
first.next = null;
return rest;
}
如下图所示,
分析步骤如下:
一,最后一次调用为,reverse(second3),其返回rest3 = second3;
二,其次是返回到reverse(second2)中,在这里面,rest = rest3 = second3;接下来:
second3.next = second2;
second2.next = null;
return rest;
完成上面步骤后就实现了3 和4的对调,即4节点指向3
三,返回到reverse(second1)中,这里的rest继续有rest = second3,变化的是second3后面还接了一个second2, 接下来:
second2.next = second1;
second1.next = null;
return rest;
这里就好理解了就是把节点2放到节点4后面
四,这时回到了第一个了,和上面几步类似,直接把第一个节点放到第二个节点后面。
至此,实现了链表反转