C 複習之路 演算法與資料結構相關 8 快慢指標

2021-10-08 17:42:33 字數 874 閱讀 6810

思路:設定慢指標步長為1,快指標步長為2,同時出發,當快指標到尾部時,慢指標到了中部;需要注意鍊錶個數是奇數還是偶數

listnode * searchmid(listnode * l1)

if (fast->next == nullptr) return slow;//節點總數為奇數

else return slow->next;//節點總數為偶數

}

思路:設定慢指標步長為1,快指標步長為2,同時出發,將慢指標遍歷的節點入棧,當快指標到尾部時,慢指標到了中部;需要注意鍊錶個數是奇數還是偶數;

之後再將棧中資料與慢指標比較,相同則為回文

bool palindromic(listnode * l1)

//後半個鍊錶與棧中前半個鍊錶比較

if (fast->next == nullptr)//節點總數為奇數,

//否則節點總數為偶數

while (slow->next != nullptr)

return true;

}

思路:設定慢指標步長為1,快指標步長為2,(這裡快指標步長設定長一點也可以,但是可能會導致更慢地遇到慢指標,所以步長2比較科學)同時出發,當快慢指標相遇,說明有環。第一次相遇後將步長設定為1,乙個從開始節點出發,乙個從相遇節點出發,再次相遇的節點則是環的入口

listnode * searchround(listnode * l1)		}

while (slow->next != nullptr&&fast->next != nullptr) }

return nullptr; //無環

}

思路:讓快指標先跑n步,然後再一起跑

資料結構與演算法之路

初級階段可以參考 下面的每個演算法給我打上十到二十遍,同時自己精簡 因為太常用,所以要練到寫時不用想,10 15分鐘內打完,甚至關掉顯示器都可以把程式打出來.1 列舉.poj1753,poj2965 2 貪心 poj1328,poj2109,poj2586 3 遞迴和分治法.4 遞推.5 構造法.p...

資料結構與演算法複習 選擇排序 C 實現

include include student.h include sorttesthelper.h using namespace std 選擇排序 tparam t 使用模板可以接受任意型別引數 param arr 待排序的陣列 param n 陣列大小 template void select...

演算法與資料結構複習 鍊錶

鍊錶定義 typedef struct listnode題 如何判斷鍊錶有環?定義兩個節點,乙個節點一次移動乙個節點,乙個節點一次移動兩個節點,如果兩者相遇則說明有環 bool judgecircle listnode node return false return false 題 請問如何判斷兩...