经典算法之单链表的反转

链表的反转,很经典的算法,看似简单实则也不是很容易
本文介绍两种方法:迭代与递归

//递归
public void reverse(){
	if (isEmpty())
		{return;}
	reverse(head.next);
}

public Node reverse(cur){
	if(cur.next==null){
		head.next=cur;
		return cur;
	}
	Node pre=reverse(cur.next);
	pre.next=cur;
	cur.next=null;
	return cur;
}


//迭代
    public void rev(){
        if(isEmpty()){
            return;
        }
        Node pre=null;
        Node n=head.next;
        Node tmp;
        while (n!=null){
            tmp=n.next;
            n.next=pre;
            pre=n;
            n=tmp;
        }
        head.next=pre;
    }

递归这种算法本身就没有迭代好理解,但是对于两边的反转问题,其实二者的理解难度差不多

来看一下递归的大概过程
经典算法之单链表的反转_第1张图片

你可能感兴趣的:(链表,算法)