1. 程式人生 > >給定一個節點為頭節點,從尾到頭反過來打印出每個節點的值

給定一個節點為頭節點,從尾到頭反過來打印出每個節點的值

題目:輸入一個連結串列的頭節點,從尾到頭打印出每個節點的值。已知連結串列節點組成只有節點值(value)和下一個節點(next)。如下:

class Node<E>{
        public E value;
        public Node<E> next;
    }

解法一:新建一個棧,從頭(輸入的頭節點)到尾遍歷連結串列,將每一個節點的值放入棧中,遍歷完成後。再執行出棧操作。

public void printReversingly_stack(Node<E> head){
        Stack<E> stack
= new Stack<E>(); Node<E> cur = head; while(cur != null){ stack.push(cur.value); cur = cur.next; } while(!stack.isEmpty()){ System.out.print(stack.pop()+"\t"); } }

解法二:使用遞迴的思想。方法一用到了棧,而遞迴本質上就是棧結構,所以當然也能使用遞迴來解決。要實現反過來輸出連結串列,這裡我們在遍歷每一個節點的時候,都先遞迴輸出後一個節點的值,再輸出自身。

public void printReversingly_Recurively(Node<E> head){
        if (head != null) {
            if (head.next != null) {
                printReversingly_Recurively(head.next);
            }
            System.out.print(head.value+"\t");
        }
    }