左右指標的常用演算法
主要解決鍊錶問題,快慢指標初始化都在鍊錶的頭結點head,前進時指標fast在前,慢指標slow在後。
若煉表中不含有環,則指標最終會遇到空指標null表示鍊錶到頭。
若含有環,經典解法就是用兩個指標,乙個每次前進兩步,乙個每次前進一步。如果不含有環,則跑得快的那個最終會遇到null;如果含有環,快指標最終會超慢指標一圈,和慢指標相遇。
boolean
hascycle
(listnode head)
return
false
;}
當快慢指標相遇時,讓其中任乙個指標重新指向頭結點,然後讓他們以相同速度前進,再次相遇時所在的節點就是環開始的節點。
listnode detectcycle
(listnode head)
slow=head;
while
(slow!=fast)
return slow;
}
快指標一次前進兩步,慢指標一次前進一步,等到快指標到達鍊錶的盡頭時,慢指標就處於鍊錶中間位置。
listnode middle
(listnode head)
return slow;
}
使用快慢指標,讓快指標先走k步,然後快慢指標開始同速前進,這樣當快指標走到鍊錶末尾null時,慢指標所在的位置就是倒數第k個鍊錶節點。
listnode searchk
(listnode head)
while
(fast != null)
return slow;
}
int
binary_search
(int
nums,
int target)
else
if(nums[mid]
else
if(nums[mid]
>target)
}return-1
;}
略
void
reverse
(int
nums)
}
見下篇 演算法學習記錄 雙鏈表
單鏈表缺點是每次都要從頭開始索引,不能往回索引,很自然就會想乙個辦法,希望能夠往回索引。這有雙鏈表就產生了。0.雙鏈表結構 typedef struct lnodeltnode,ptnode 增加了乙個前驅指標,這有就可以向回索引了。1.雙鏈表的初始化 1.雙向鍊錶的init void dlist ...
LeetCode 演算法學習 2
longest substring without repeating characters given a string,find the length of the longest substring without repeating characters.example 1 input ab...
演算法 學習筆記
1.輸入輸出演算法至少有乙個或多個輸出 2.有窮性 3.確定性 4.可行性 1.正確性a.演算法程式沒有語法錯誤 b.演算法程式對於合法的輸入資料能夠產生滿足要求的輸出結果 c.演算法程式對於非法的輸入資料能夠得出滿足規格說明的結果 d.演算法對於精心選擇的,甚至刁難的測試資料都有滿足要求的輸出結果...