面試題6:從尾到頭列印鍊錶
題目:
輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值
鍊錶的結點定義如下
public class listnode
}
注意:
面試中,如果打算修改輸入的資料,最好先問好是否資料是允許修改的
思路:
1. 遍歷順序從頭到尾,列印順序從尾到頭,第乙個結點最開始被訪問,但是最後才被輸出——棧的「先進後出」;
2. 遞迴在本質上就是乙個棧結構,所以也可以用遞迴實現:先遞迴輸出它後面的結點,再輸出該結點自身。 【問題:當鍊表非常長的時候,會導致函式呼叫的層級很深,從而有可能導致函式呼叫棧溢位,因此還是用棧基於迴圈實現的**魯棒性好一些】
// 棧實現
class q6
// 只有頭結點的鍊錶
listnode head1 = new listnode(0);
// 空鍊錶
listnode head2 = null;
// 依次顯示當前鍊錶
head.showlist(head1);
system.out.println("\n----");
showreverse(head1);
} public static void showreverse(listnode node)
// 出棧
while(!stack.empty())
}
// 遞迴
class test
// 只有頭結點的鍊錶
listnode head1 = new listnode(0);
// 空鍊錶
listnode head2 = null;
// 依次顯示當前鍊錶
head.showlist(head);
system.out.println("\n----");
showreverse(head);
} public static void showreverse(listnode node) // 之前在這裡加了個else就只輸出了最後乙個_(:з」∠)_
system.out.printf("%d ", node.val);
}}
劍指offer第二版 面試題8 java
題目描述 給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標 分析 情況 一 有右子樹,這時只需要把其右孩子作為下乙個遍歷的 並不是要找的 節點,然後沿著該節點的左子樹 如果有的話 出發,直到遇到葉子節點,那麼該葉子節...
劍指offer第二版 面試題9(java)
面試題9 用兩個棧實現佇列 題目描述 方法 兩個棧 stack1 stack2 插入時,直接放入stack1 刪除時,直接彈出pop2中的物件 如果pop2為空,則先將pop1中的物件放入stack2中,再從stack2裡pop第乙個 如 依次放入stack1中1 2 3,在彈出並放入stack2中...
劍指offer第二版 面試題10(java)
面試題10 斐波那契數列 題目一 寫乙個函式,輸入n,求斐波那契數列的第n項。定義 分段函式 f n 0 if n 0 f n 1 if n 1 f n f n 1 f n 2 if n 1 可用遞迴的方式,但在遞迴呼叫層級太多時,會導致呼叫棧溢位,且在此題中,遞迴方法有很多重複的計算 使用自下而上...