原创 單鏈表-鏈表的中間結點

一、思路 給定單鏈表,返回鏈表的中間結點。如果有兩個中間結點(總結點個數爲偶數),則返回第二個中間結點。舉例: 例子1: 輸入:[1,2,3,4,5] 輸出:結點 3  例子2: 輸入:[1,2,3,4,5,6] 輸出:結點 4 從以上兩

原创 單鏈表-刪除所有給定值爲val的所有結點

一、思路 刪除鏈表中等於給定值 val 的所有節點。舉例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 1.1 迭代分析 爲了統一對不帶頭結點的單鏈表的結點的操作,額外使用啞結點。

原创 單鏈表-有序鏈表轉換二叉樹

題目來源LeetCode第109題 一、思路 給定一個單鏈表,其中的元素按升序排序,將其轉換爲高度平衡的二叉搜索樹。本題中,一個高度平衡二叉樹是指一個二叉樹每個節點的左右兩個子樹的高度差的絕對值不超過 1。舉例, 給定的有序鏈表: [-1

原创 單鏈表-插入排序

一、思路 寫在前面,遞歸和迭代的分析是不同的,如果我們希望利用遞歸實現,就掌握與遞歸有關的知識點;如果我們希望用迭代實現,就掌握與迭代有關的知識點。先掌握一種,然後掌握另一種。 1.1 知識點1 單鏈表 單鏈表是一種只能前進,不能後退的鏈

原创 單鏈表-兩數相加

題目來源LeetCode第445題 一、思路 給定兩個非空鏈表來代表兩個非負整數。數字最高位位於鏈表開始位置。它們的每個節點只存儲單個數字。將這兩數相加會返回一個新的鏈表。舉例: 輸入: (7 -> 2 -> 4 -> 3) + (

原创 數組-將有序數組轉換爲二叉搜索樹

題目來源LeetCode第108題 一、思路 將一個按照升序排列的有序數組,轉換爲一棵高度平衡二叉搜索樹。本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。舉例: 給定有序數組: [-10,-3

原创 樹-二叉樹的最大深度

來源LeetCode第104題 一、思路 給定一個二叉樹,找出其最大深度。二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。 一棵深度爲3的二叉樹 數據結構在邏輯上可以分爲線性結構、非線性結構。很明顯,樹和圖一樣都是非線性結構,額

原创 單鏈表-迴文鏈表

題目來源LeetCode第234題 一、思路 請判斷一個鏈表是否爲迴文鏈表。舉例: 例1: 輸入: 1->2 輸出: false 例2: 輸入: 1->2->2->1 輸出: true 要求:時間複雜度爲O(n),空間複雜度爲O(

原创 單鏈表-奇偶鏈表

題目來源 一、思路 給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裏的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。舉例: 例1: 輸入: 1->2->3->4->5->NULL 輸出: 1->

原创 數組-堆排序

一、思路 數組可以抽象成一個堆結構。堆的深度爲log,由一個亂序數組變成一個堆數組時間複雜度爲O(nlogn),堆頂元素是最值,每次從堆頂彈出一個元素,重複進行n-1次後,數組有序。 下面定義一些堆排序的相關操作: HEAPIFY 建堆:

原创 樹-二叉樹遍歷

 一、思路 遍歷實際上是按照某種順序訪問結點,比較典型的有先序、中序、後序、層序等。二叉樹天然具有子結構,即左子樹和右子樹同樣是二叉樹,就是規模更小而已。二叉樹三種遍歷方式 1.1 先序 棧S; p= root; while(p || S

原创 單鏈表-鏈表相交問題

題目來源:LeetCode160求兩單鏈表的交點  一、思路 舉例1-相交的情形 舉例2-不相交的情形 如果兩個鏈表沒有交點,返回 null. 在返回結果後,兩個鏈表仍須保持原有的結構。 可假定整個鏈表結構中沒有循環。 程序儘量滿

原创 單鏈表-反轉

一、思路 描述:反轉一個單鏈表。舉例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL 1.1 迭代分析 單鏈表無法直接向後指,因爲只有1個next域。所以需要使用指針prev作爲指針cur

原创 單鏈表-歸併排序

題目來源148排序鏈表 一、思路 在 O(n log n) 時間複雜度和常數級空間複雜度下,對鏈表進行排序。舉例: 例1: 輸入: 4->2->1->3 輸出: 1->2->3->4 例2: 輸入: -1->5->3->4->0 輸出

原创 清除DataGridView的全部內容,包括標題行

一、問題產生的原因 在VS2017下,我用DataGridView自己實現的一個控件庫。由於本文的重點不在我的控件庫是怎麼實現的,所以我只需要給出功能描述。在文本框輸入想查詢的表名,然後點擊顯示按鈕。然後問題來了——在我想查詢班級信息的時