原创 劍指Offer:面試題16——反轉鏈表(java實現)

問題描述 定義一個函數,輸入一個鏈表的頭結點,反轉該鏈表並輸出反轉後的鏈表的頭結點。鏈表結點如下: public class ListNode { int val; ListNode next = null;

原创 劍指Offer:面試題17——合併兩個排序的鏈表

題目描述 輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。 思路1: 分別用p1,p2兩個指針掃描兩個有序鏈表,p3指針去構建新鏈表h3. p1.val <= p2.val,

原创 劍指Offer:面試題23——從上往下打印二叉樹(java實現)

問題描述: 從上往下打印出二叉樹的每個節點,同層節點從左至右打印。 思路: 按照層次遍歷的方法,使用隊列輔助。 1.將根結點加入隊列。 2.循環出隊,打印當前元素,若該結點有左子樹,則將其加入隊列,若有右子樹,將

原创 劍指Offer:面試題26——複製複雜的鏈表(java實現)

問題描述: 輸入一個複雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點)。 思路1: 1.先複製鏈表節點,並用next鏈接起來。 2.然後對每一個結點去修改它的隨機指針S。遍

原创 劍指Offer:面試題21——包含min函數的棧(java實現)

問題描述: 定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的min函數。在該棧中,調用min,push及pop的時間複雜度都是O(1). 思路:加入一個輔助棧用來存儲最小值集合 (這裏要注意題目並沒有說棧內的元素類

原创 劍指Offer:面試題11——數值的整數次方(java實現)

題目描述: 實現函數double Power(double base, int exponent),求base的exponent次方,不得使用庫函數,同時不需要考慮大數問題 思路:本題的重點考察內容是代碼的完整性,要綜合考慮輸

原创 劍指Offer:面試題19——二叉樹的鏡像(java實現)

問題描述: 操作給定的二叉樹,將其變換爲源二叉樹的鏡像。 二叉樹結點定義爲: public class TreeNode { int val = 0; TreeNode left = null; Tre

原创 劍指Offer:面試題27——二叉搜索樹與雙向鏈表(java實現)

問題描述: 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。 思路: 將樹分爲三部分:左子樹,根結點,右子樹。 1.我們要把根結點與左子樹的最大結點連接

原创 劍指Offer:面試題24——二叉搜索樹的後序遍歷序列(java實現)

問題描述: 輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的數組的任意兩個數字都互不相同。 思路: 1.首先後序遍歷的結果是[(左子樹的後序)(右子樹的後序

原创 劍指Offer:面試題25——二叉樹中和爲某一值的路徑(java實現)

問題描述: 輸入一棵二叉樹和一個整數,打印出二叉樹中結點指的和爲輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。二叉樹結點的定義如下: public class TreeNode { in

原创 寫代碼時注意的幾點

一.規範性 書寫清晰 佈局清晰 命名合理 命名儘量使用有意義的單詞; 變量常用i,j,k命名; 函數常用f,h,g命名。 二.完整性 完成基本功能 考慮邊界條件 做好錯誤處理 對應的考慮好三個測試 功能

原创 劍指Offer:面試題14——調整數組順序使奇數位於偶數前面(java實現)

問題描述 輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。 思路: 1.最簡單的想法,不考慮時間複雜度,掃描數組,遇到偶數,先取出這個數,然後把它後面的數字

原创 劍指Offer:面試題12——打印1到最大的n位數(java實現)

問題描述: 輸入數字n,按順序打印出從1到最大的n位十進制數,比如輸入3,則打印出1,2,3一直到最大的3位數即999. 思路1:最簡單的想法就是先找出最大的n位數,然後循環打印即可。 public static void P

原创 劍指Offer:面試題13——在O(1)時間刪除鏈表結點

問題描述: 給定單向鏈表的頭指針和一個結點指針,定義一個函數在O(1)時間刪除該結點。鏈表結點與函數的定義如下: public class ListNode{ int value; ListNode next;

原创 劍指Offer:面試題20——順時針打印矩陣(java實現)

題目描述: 輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數 字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15