原创 程序員面試經典--鏈表分割

2.4問題: 編寫代碼,以給定值x爲基準將鏈表分割成兩部分,所有小於x的結點排列在大於或等於x的結點之前。 思考:可以直接創建兩個鏈表,一個鏈表存放小於x的元素,另一個鏈表存放大於或等於x的元素。迭代訪問整個鏈表之後,合併兩個鏈表即可。

原创 程序員面試經典--雙鏈表求和

2.5問題: 給定兩個用鏈表表示的數,每個結點包含一個數位。這些數位是反向存放的,也就是個位排在鏈表首部。編寫函數對這兩個整數求和,並用鏈表形式返回結果。 思考:遞歸思想,非常巧妙,需仔細分析思考,遞歸多次,每次都會創建一個節點,反饋給上

原创 程序員面試經典--棧排序

3.6問題: 編寫程序,按升序對棧進行排序(即最大元素位於棧頂)。最多隻能使用一個額外的棧存放臨時數據,但不得將元素複製到別的數據結構中(如數組)。 思考: 待排序棧s1,將自己的數據從棧頂不斷的出棧按升序插入臨時數據棧s2。插入操作時,

原创 程序員面試經典--鏈表迴文判斷

2.7問題: 編寫一個函數,檢查鏈表是否爲迴文。 思考:若鏈表長度未知,可用快慢runner指針的方法,迭代訪問鏈表將鏈表的前半部分入棧,然後將棧內的數據與鏈表的後半部分進行對比。 import java.util.*; //節點類 c

原创 java.util.Stack裏Stack默認容量有多大?

如果是java.util.Stack的話,通過查看源碼,Stack只有一個空構造方法,它繼承了Vector。Vector中的無參構造如下:public Vector() { this(10);}this(10)調用了publ

原创 程序員面試經典--返回棧中最小元素

3.2問題: 請設計一個棧,除去pop與push方法,還支持min方法,可返回棧元素中的最小值。push、pop和min三個方法的時間複雜度必須爲O(1)。 思考: 一種解法是,在Stack類裏添加一個int型的minvalue。當min

原创 Java中try、catch、finally的用法

Java中try,catch,finally的用法,以前感覺還算熟悉,但看到一篇博文才有更深點的理解,總結網友博客如下。 Java異常處理的組合方式: 1.try+catch  運行流程:運行到try塊中,如果有異常拋出,則轉到cat

原创 遞歸和迭代

遞歸和迭代都是循環中的一種。 簡單地說,遞歸是重複調用函數自身實現循環。迭代是函數內某段代碼實現循環,而迭代與普通循環的區別是:循環代碼中參與運算的變量同時是保存結果的變量,當前保存的結果作爲下一次循環計算的初始值。 遞歸循環中

原创 程序員面試經典--動物收容所

3.7問題: 有家動物收容所只收容狗與貓,且嚴格遵守“先進先出”的原則。在收養該收容所的動物時,收養人只能收養所有動物中“最老”(根據進入收容所的時間長短)的動物,或者,可以挑選貓或狗(同時必須收養此類動物中“最老”的)。換言之,收養人不

原创 程序員面試經典--用棧實現隊列

3.5問題: 實現一個MyQueue類,該類用兩個棧來實現一個隊列。 思想: 定義兩個棧,stackNewest和stackOldest,stackNewest頂端爲最新元素,stackOldest頂端爲最舊元素。在將一個元素出列時,我們

原创 程序員面試經典--棧實現堆盤子

3.3問題: 設想有一堆盤子,堆太高可能會倒下來。因此,在顯示生活中,盤子堆到一定高度時,我們就會另外堆一堆盤子。請實現數據結構SetOfStacks,模擬這種行爲。setOfStacks應該由多個棧組成,並且在當前一個棧填滿時新建一個棧

原创 程序員面試經典--鏈表節點查找

2.2問題: 實現一個算法,找出單向鏈表中倒數第k個節點。 鏈表數據: import java.util.*; //節點類 class Node { protected Node next; //指針域 protected int

原创 java linkedlist操作詳解

1 使用方法   LinkedList基於雙端鏈表實現,可以作爲棧、隊列或者雙端隊列使用。 public class LinkedList<E> extends AbstractSequentialList<E>

原创 程序員面試經典--鏈表環路檢測與入口結點返回

2.6問題: 給定一個有環鏈表,實現一個算法返回環路的開頭結點。 思考: 第一:監測鏈表是否存在環路。有一種簡單的方法叫做fastrunner/slowrunner法。fastruner一次移動兩步,slowrunner一次移動一步。如果

原创 程序員面試經典--刪除結點(僅能訪問該結點)

2.3問題: 實現一個算法,刪除單向鏈表中間的某個結點,假定你只能訪問該結點。 思考: 題目給出,訪問不到鏈表首結點,只能訪問那個待刪除結點。可以將該結點的後繼結點數據拷貝到當前結點,然後刪除這個後繼結點。 import java.ut