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);
}
}
DFS递归算法与BFS迭代算法实例总结
最新推荐文章于 2024-08-26 21:46:59 发布