题目
该系列文章题目和思路均参考自:《剑指Offer》
解法
思路1:首先想到的是反转链表后进行顺序打印,但这样会修改输入的链表结构。若题目要求不允许修改输入链表的结构,则这种方法不可行。
思路2:使用栈进行实现。
思路3:既然想到了栈,递归本身就是维护了一个栈结构,可以直接使用递归实现。
代码实现
public class PrintListReversely {
/**
* 反转链表
* @param head
*/
public static ListNode reverse(ListNode head) {
ListNode newHead = head;
ListNode cur = head;
ListNode prev = null;
while (cur != null) {
ListNode next = cur.getNext();
if (next == null)
newHead = cur;
cur.setNext(prev);
prev = cur;
cur = next;
}
return newHead;
}
/**
* 思路1
* @param head
*/
public static void printListReversely_Reverse(ListNode head) {
// 首先反转链表
ListNode newHead = reverse(head);
// 顺序输出
Utils.printList(newHead);
}
/**
* 思路3
* @param head
*/
public static void printListReversely_Recursion(ListNode head) {
if (head == null)
return;
printListReversely_Reverse(head.getNext());
System.out.println(head.toString());
}
public static void main(String[] args) {
ListNode head = Utils.createLinkedListWithoutOrder();
Utils.printList(head);
System.out.println("========================");
// test1
printListReversely_Reverse(head);
// test2
printListReversely_Recursion(head);
}
}