一、題目
二、方案
確定陣列列表是否為回文很簡單,我們可以使用雙指標法來比較兩端的元素,並向中間移動。乙個指標從起點向中間移動,另乙個指標從終點向中間移動。這需要 o(n) 的時間,因為訪問每個元素的時間是 o(1),而有 n 個元素要訪問。
然後,直接在鍊錶上操作並不簡單,因為不論是正向訪問還是反向訪問都不是 o(1)。而將鍊錶的值複製到陣列列表中是 o(n),因此最簡單的方法就是將鍊錶的值複製到陣列列表中,再使用雙指標法判斷。
bool ispalindrome(listnode* head)
// 判斷是否回文
for(int i=0; i其他方案:將所有節點值入棧,然後一一出棧並比較
class solution
p = head;
while(p)
s.pop();
p = p->next;
}return true;}};
參考: 判斷鍊錶是否有環 雙指標法
判斷乙個單向鍊錶是否有環 思路 設定雙指標,一快一慢,若有環兩個指標一定相遇 快指標pf每次走一步,以便於遍歷所有結點 慢指標ps每次走兩步,目的是遍歷環中的每乙個結點 include using namespace std 鍊錶結點 typedef struct listnode listnode...
移除鍊錶元素 雙指標法 C
思路 1.判斷head是否為空,若空返回null or nullptr。鍊錶問題常用 2.pre和cur分別指向第乙個節點和第二個節點。3.cur判斷是否相等,若相等,一直刪下去 若不相等,兩個節點同時以相同速度往尾部方向移動。跳出迴圈。4.這時,相當於除了第乙個節點沒被判斷外,鍊錶其他節點都進行了...
160 相交鍊錶(雙指標法)
解題思路 1.雙指標法 讓指標1遍歷完鍊錶1後指向鍊錶2的第乙個節點,指標2遍歷完鍊錶2後指向鍊錶1的第乙個節點。這樣指標1遍歷完鍊錶2後,和指標2遍歷完鍊錶1後走過的總距離就是一樣的,因此當兩個指標都進入第二個鍊錶後就可以保證它們離表尾的距離相同,就可以輕鬆判斷是否相交了。2.鍊錶的最後乙個節點的...