原创 2-22逆序打印鏈表

題目描述 給定一個鏈表,從尾到頭打印每一個元素。 解題方法1 鏈表是鏈式存儲結構,不同於數組,沒有辦法直接逆序遍歷。 第一反應,我們可以藉助於棧或數組,先順序遍歷鏈表把所有元素存儲到數組或棧中,然後再遍歷數組或棧進行逆序打印

原创 字符編碼---

認識編碼 計算機中的所有數據都是以二進制的形式存放的,而如何利用01表示出各種文字符號信息等就要使用編碼。 以特定的方式把一組特定的字母轉換爲二進制數據就稱爲編碼。而以此方式把這組二進制數據轉換爲原來的字母就是解碼。 當編碼方式

原创 Java C語言存儲空間對比---

C語言五大存儲區 代碼區 存儲程序代碼,define定義的常量 全局(靜態)區 全局變量和靜態變量的存儲是放在這一塊的。 初始化的全局變量和靜態變量與未初始化的全局變量和靜態變量分開存放。 常量區 常量字符串,其他常量 棧內存

原创 1-5 一個棧排序另一個棧

題目描述 用一個棧實現另一個棧的排序。 一個棧中元素的類型爲整型,現在將該棧從頂到底按從大到小的順序排序,只允許額外使用一個棧,不允許使用其他數據結構。 解題方法1 設待排序的棧爲s1,輔助的棧爲s2,再定義一個變量e保存剛

原创 2-19有序環形鏈表中插入新節點

題目描述 給定一個環形單鏈表的頭節點,和一個num值,生成一個新節點插入到原鏈表中。保證環形鏈表從頭節點開始到最後一個節點是非降序排序。 解題方法1 比如,環形鏈表爲 1 2 2 3 5 5 7 當num=3,

原创 2-10兩個單鏈表生成相加鏈表

題目描述 解題方法1 第一時間想到的方法是,我們可以把兩個鏈表轉化成兩個整數,然後求和,再將求和後的整數轉化爲求和鏈表。 把鏈表轉化爲整數,我們可以先求鏈表表長,然後給每個節點值乘上相應的冪方,將各節點依次求和。 對整數轉化爲鏈

原创 2-20合併兩個有序鏈表

題目描述 傳入兩個有序鏈表,進行合併,最後返回新鏈表頭節點。 解題方法1 使用兩個指針p,q分別指向兩個鏈表,比較兩個指針指向的值,將值更小的那個節點斷開連接到新鏈表末尾並將值更小節點對應指針後移,當兩個指針有一個爲null

原创 2-9複製含有隨機指針的鏈表

題目描述 例如:原鏈表和賦值後鏈表如下所示,上箭頭表示隨機指針。 解題方法1 我們可以申請一個哈希表,遍歷原鏈表保存原節點和複製節點的一個映射。如下: 然後我們再遍歷原鏈表進行新鏈表的建立。 如遍歷到節點1時,通過哈希

原创 1-4 實現貓狗隊列

題目描述 實現貓狗隊列。 解題嘗試 我們可以定義三個隊列catq,dogq和allq,catq只存放cat對象,dogq只存放dog對象,allq存放所有對象。這樣all隊列就可以記錄所有元素的入隊順序。 這樣可以解決部

原创 2-21按照左右半區的方式重新組合鏈表

題目描述 解題方法1 先找到左半區和右邊區的第一個節點,將左右半區看做兩個鏈表。 然後分別從兩個鏈表中取出首節點連接到新鏈表末尾,直到左右半區均爲空。 public class Test { public stati

原创 1-9 求最大子矩陣問題

題目描述 求最大子矩陣問題。 解題方法1 首先,我們以每一行做切割統計以當前行作爲底的情況下,每個位置往上1的數量(遇到0爲止),這樣針對每一行我們都可以得到一個數組。如:第一行數組爲 1 0 1 1,第二行數組爲 2 1

原创 2-1打印兩個有序鏈表公共部分

題目描述 傳入兩個鏈表頭節點,打印兩個有序鏈表的公共部分。 解題方法1 使用兩個引用p和q依次指向兩個鏈表,然後比較p和q所指向的值。 如果p.val < q.val p向後移動一位。 如果p.val > q.val q

原创 2-14刪除無序鏈表中值重複出現的節點

題目描述 刪除無需鏈表中值重複出現的節點 解題方法1 可以使用哈希表來優化查找過程。遍歷鏈表,依次將節點的值放入哈希表,如果當前節點p的值在哈希表中已存在就刪除該節點p。 注意要使用一個指針pre維護最近沒有被刪除的節點,

原创 1-10max-min不超過num的子數組

題目描述 給定一個數組arr和一個值num,求子數組的最大值 - 最小值 <= num 的子數組的數量。 如給定arr = {3,2,5,1,4,6},num = 2 ,則符合條件的子數組有兩個,爲 {3,2} {4,6}。

原创 2-15刪除單鏈表中指定值的節點

題目描述 給定一個頭節點,一個num值,刪除鏈表中所有值爲num的節點。 解題方法1 此題難度比較低,遍歷尋找所有值爲num的節點然後刪除即可。注意維護一個前驅節點。 時間複雜度爲n。 public class Test