链表反转的两个方法(迭代和递归)

迭代方法

记录链表中的三个连续节点: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;
	}
posted @ 2019-10-09 20:35  dwwzone  阅读(291)  评论(0编辑  收藏  举报