原创 面試題5:從頭到尾打印鏈表

題目:輸入一個鏈表的頭結點,從尾到頭反過來打印出每個結點的值。 思路1:遍歷一遍鏈表,將結點存入棧中,最後彈出棧中元素。 public void reverseListNode(ListNode listNode) { Stac

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

題目:給定單向鏈表的頭指針和一個節點指針,定義一個函數在O(1)時間刪除該節點。 思路: 要刪除的節點i,先把i的下一個節點j的內容複製到i,然後把i的指針指向節點j的下一個節點。此時再刪除節點j,其效果剛好是把節點i給刪除了。

原创 查找——二叉排序樹

用線性表作爲表的組織形式時,用二分查找效率最高。但二分查找只能用於順序存儲結構,不能用鏈式存儲結構,不適用於插入刪除操作頻繁的情況,只適合靜態查找表。 對動態查找表進行高效率查找,最好用二叉排序樹。 1.基本概念 二叉排序樹(Binary

原创 面試題16:反轉鏈表

題目:定義一個函數,輸入一個鏈表的頭結點,反轉該鏈表並輸出反轉後鏈表的頭結點。思想:從頭開始調整鏈表的指向,將當前節點指向下一個節點的指針,改爲指向前一個節點。從頭結點開始,頭結點的前一個節點爲null。java實現:(非遞歸)publi

原创 將字母轉換爲列號

題目:在Excel2003中,用A表示第1列,B表示第2列......Z表示第26列,AA表示第27列,AB表示第28列......以此類推。請寫出一個函數,輸入用字母表示的列號編碼,輸出它是第幾列。 思路:A-Z看作26進制數,就是把

原创 面試題15:鏈表中倒數第k個結點

題目:輸入一個鏈表,輸出該鏈表中倒數第K個結點。爲了符合大多數人的習慣,本題從1開始計數,即鏈表的尾結點是倒數第1個結點。例如一個鏈表有6個結點,從頭結點開始它們的值依次是1、2、3、4、5、6。這個鏈表的倒數第3個結點是值爲4的結點。思

原创 面試題6:重建二叉樹

題目:根據某二叉樹的前序遍歷和中序遍歷結果,重建該二叉樹 思路:前序遍歷的第一個數字就是根節點,在中序遍歷中找到根節點,根節點左邊是左子樹節點,根節點右邊是右子樹節點;這樣遞歸構建 public BinaryTreeNode cons

原创 插入排序——直接插入排序

一、直接插入排序 直接插入排序的基本思想是:將一個記錄插入到已排好序的有序表中,從而得到一個新的有序表。 設數組爲a[0…n-1]。 1. 初始時,a[0]自成1個有序區,無序區爲a[1..n-1]。令i=1 2. 將a[i]併

原创 面試題14:調整數組順序使奇數位於偶數前面

題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。思路:維護兩個指針,第一個指針初始指向數組第一個數字,只向後

原创 [LeetCode]Add Digits

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. For example: G

原创 查找--線性表

查找基本概念:(1)動態查找和靜態查找表     若在查找的同時對錶做修改操作(如插入和刪除),則相應的表稱之爲動態查找表。否則爲靜態查找表。 (2

原创 樹的基礎知識

對於任意節點i,i的深度爲根到該節點i的唯一路徑的長,根的深度爲0,樹的深度等於最深的樹葉的深度; i的高度爲節點i到一片樹葉的最長路徑的長,所有樹葉的高度爲0,一棵樹的高等於根的高; 樹的深度=樹的高。 1.樹的實現 將每個節點的所有

原创 面試題8:旋轉數組的最小數字

題目:把一個最開始的若干元素搬到數組的末尾,我們稱爲數組的旋轉。輸入一個遞增排序數組的一個旋轉,輸出旋轉數組的最小元素。例如數組{3,4,5,1,2}是{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。 思路:採用二分查找,兩個指針

原创 插入排序——希爾排序

希爾排序算法思想:希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨着增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止。本質是分組插入排序,每次將較小的元素插入到前面,較大的元

原创 面試題12:打印1到最大的n位數

題目:輸入數字n,按順序打印從1到最大的n位十進制數。這是一個大數問題,n較大時會產生溢出,需要用字符串來表示數字。方法1:將n位的字符串中每一個數字初始化爲‘0’,然後每次爲字符串表示的數字加一,再打印。需要兩步,一在字符串表達的數字上