DFS递归算法与BFS迭代算法实例总结

public class SimpleListReverse {

	
	/**
	 * 递归调用方式实现
	 * @param head
	 * @return
	 */
	public static LinkedNode reverse(LinkedNode head){
		/**
		 * 递归调用前面往往放判斷是否要繼續往下递归的判斷條件
		 */
		if(head.next == null){
			return head;
		}
		
		/**
		 * 递归调用前面如果存在逻辑,則这部分处理逻辑是最后面的即最深一次的最后执行,最前面的最先执行。
		 */
		LinkedNode LinkedNode = reverse(head.next);
		/**
		 * 递归调用后面的这部分处理逻辑实际是最后面的即最深一次的最先执行,最前面的反而最后执行。因為往往邏輯都是放在後面,所以说递归调用是从后往前追溯正是缘于此。又叫回溯法,即執行到最深一層後又逐步回溯到最初執行的地方。
		 */
		head.next.next=head;
		head.next=null;
		
		/**
		 *  如果方法的返回值就是递归调用的返回值且未做其他计算,那么最后的返回值就是最深一次调用的返回值
		 */
		return LinkedNode;
	}
	
	/**
	 * 迭代方式实现
	 * @param head
	 * @return
	 */
	public static LinkedNode reverseUseIterator(LinkedNode head){
		LinkedNode pre = null;
		LinkedNode end = null;
		while(head.next != null){
			end = head.next;
			head.next=pre; 
			pre = head;
			head = end;
		} 
		head.next = pre;
		return head;
	}
	
	public static void main(String[] args) {
		/**
		 * 生成初始链表并打印
		 */
		LinkedNode head = LinkedNodeUtil.generateLinkedNodes(10);
		LinkedNodeUtil.printLinkedNodes(head);
		/**
		 * 反转初始链表并打印
		 */
		head = reverse(head); 
		LinkedNodeUtil.printLinkedNodes(head);
		
		head = reverseUseIterator(head);
		LinkedNodeUtil.printLinkedNodes(head);
		
	}
	
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hiker帝国

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值