1. 程式人生 > >面試題總結-資料結構與演算法

面試題總結-資料結構與演算法

排序

氣泡排序-比較交換

快速排序-劃分-比較交換-遞迴

選擇排序-選擇-比較交換

查詢

二分查詢

二叉樹

二叉樹的前序、中序、後序遍歷(遞迴實現)

二叉樹的前序、中序、後序遍歷(非遞迴實現)

判斷一棵樹是否為二叉平衡樹

連結串列

連結串列的翻轉

判斷連結串列是否有環?若有環,則求該環的長度?並求其連線點?

  • 連結串列是否有環
一個快指標(走2步),一個慢指標(走1步),都從頭開始:
	若有環則它們相撞(設碰撞點為x);
	若無環則快指標遇到空則跳出迴圈;
  • 求連結串列環的長度
從碰撞點x開始,又走(一個走一步,一個走兩步),當再次碰撞時,它們走的次數為環的長度
  • 求連線點
記住結論:碰撞點到連線點的距離等於頭結點到連線點的距離。兩個指標(都一次一步),一個從頭走,一個從碰撞點走,第一次碰撞的節點就是連線點

如何快速查詢連結串列的中間節點?(只遍歷一次)

建立兩個指標,一個指標一次遍歷一個節點,一個指標一次遍歷兩個節點,當快指標遍歷到空節點時,慢指標指向的位置即為連結串列的中間位置

兩個棧實現佇列