一、快速找到鍊錶的中間節點
1、常規方法:遍歷所有節點l,找到中間 l/2,遍歷l/2, 搞定。
2、較快速 : fast和slow都指向頭,fast每次跳2個node,slow跳1個,當fast跳到尾的時候,slow就是中間。
return slow;
}
二、判斷乙個鍊錶有迴圈
1、「o」 型
(1)記錄乙個 node的位址,然後遍歷整個鍊錶(步長可為1,也可為2),與這個位址對比。
2、「6」 型
(1)定義兩個指標slow,fast,指向同一node,slow步長為1,fast步長為2,進行遍歷;
(2)當出現 fast == slow時,說明存在迴圈。
p.s:可聯想操場賽跑,只要一直跑,快的一定會和慢的再相逢;此方法也適用於「o」型。
}return icycleflag;
}
三、鍊錶的逆序
1、畫個鍊錶圖,揣摩一下,先暫存->next下一節點到tmp(為了遍歷),再操作->next(改變指向)
再儲存一下上乙個節點。(2015.4.13.18.50)
typedef struct node
node_t;
node_t * list_reser(node_t *psthead)
/*返回原尾節點,也就是現在的頭結點*/
return lastnode;
}
找鍊錶的中間結點
找鍊錶的中間結點 已知單鏈表l,編寫演算法找出該鍊錶的中間位置的結點。思考 1 一種想法就是從頭遍歷到尾部,記錄長度。隨後再次遍歷一次,直到長度的二分之一即找到。時間複雜度為o 3n 2 2 另一種想法 設定快慢指標,快指標一次走兩步,慢指標一次走一步,當快指標走到null的時候,慢指標的位置就是鍊...
鍊錶,迴圈鍊錶,雙向鍊錶,判環和入環點
總結鍊錶相關練習題 鍊錶在計算機中記憶體的分配是不連續的,但是每個節點都有乙個指向下乙個節點的next引用,雙向鍊錶還有乙個指向前乙個節點的prev引用 只要獲得鍊錶的頭,那麼剩下的元素都很容易獲取了。所以鍊錶的每個節點有2個組成部分,乙個是存放資料的資料域,乙個是指向前驅或後繼的引用。public...
鍊錶17 鍊錶判環
題目 如何判斷乙個單鏈表是否有環?有環的話返回進入環的第乙個節點的值,無環的話返回 1。如果鍊錶的長度為n,請做到時間複雜度o n 額外空間複雜度o 1 給定乙個單鏈表的頭結點head 注意另乙個引數adjust為加密後的資料調整引數,方便資料設定,與本題求解無關 請返回所求值。詳見lb7,只是返回...