劍指offer第二版 面試題6(java)

2021-09-12 05:25:22 字數 1253 閱讀 5303

面試題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 可用遞迴的方式,但在遞迴呼叫層級太多時,會導致呼叫棧溢位,且在此題中,遞迴方法有很多重複的計算 使用自下而上...