鍊錶(找中間 判迴圈 逆序 )

2021-06-29 14:25:33 字數 795 閱讀 6003

一、快速找到鍊錶的中間節點

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,只是返回...