迭代方法
记录链表中的三个连续节点:reverse ,first,second。在每轮迭代中,从原链表中提取first并将它插入逆链表的开头。一直保持first指向原链表剩余节点的首节点,second指向原链表剩余节点的第二个节点,reverse指向逆链表的首节点
public Node reverse(Node x) {
Node first = x;
Node reverse = null;
while(first != null) {
Node second = first.next;
first.next = reverse;
reverse = first;
first = second;
}
return reverse;
}
递归方法
假设含有N个节点,先递归颠倒最后N-1个节点,然后将链表的首节点插入到结果的链表的末端
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;
}