思路:設定慢指標步長為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 題 請問如何判斷兩...