鍊錶重合是乙個好玩的問題。原題目是這樣的:有兩個鍊錶,那麼如何判斷這兩個鍊錶是不是重合的?至於這個鍊錶在什麼時候重合的,這不重要,關鍵是判斷這個鍊錶究竟有沒有重合。究竟有什麼方法呢?
最簡單的方法就是檢視兩者有沒有共同點。那麼依次判斷就行了。
int find_node_in_link(link_node* plink, link_node* pnode)
return 0;
}status find_if_link_merge(link_node* plinkone, link_node* plinktwo)
return false;
}
另外一種方法就是計數的方法,既然鍊錶在某處重合,那麼此點訪問的次數就是2,所以我們可以依次把兩個鍊錶遍歷一下,最後檢視有沒有節點的count為2即可。
typedef struct _link_node
link_node;
void process_all_link_node(link_node* pnode)
}
從計數的方法,我們可以發現如果兩個鍊錶是重合的,那麼他們的最後乙個節點必然是相同的,所以只要判斷最後乙個節點是否相同即可。
status find_if_link_merge(link_node* plinkone, link_node* plinktwo)
總結:1)鍊錶重合的題目雖然簡單,但是從不同的角度可以有不同的答案;
2)本題目來自《程式設計之美》, 如果對解法還有興趣的朋友可以參考《程式設計之美》。
一步一步寫演算法(之鍊錶重合)
原文 一步一步寫演算法 之鍊錶重合 鍊錶重合是乙個好玩的問題。原題目是這樣的 有兩個鍊錶,那麼如何判斷這兩個鍊錶是不是重合的?至於這個鍊錶在什麼時候重合的,這不重要,關鍵是判斷這個鍊錶究竟有沒有重合。究竟有什麼方法呢?最簡單的方法就是檢視兩者有沒有共同點。那麼依次判斷就行了。int find nod...
一步一步寫演算法(之鍊錶排序)
相比較線性表的排序而言,鍊錶排序的內容稍微麻煩一點。一方面,你要考慮資料插入的步驟 另外一方面你也要對指標有所顧慮。要是有一步的內容錯了,那麼作業系統會馬上給你彈出乙個exception。就鍊錶的特殊性而言,適合於鍊錶的排序有哪些呢?1 插入排序 適合 2 氣泡排序 適合 3 希爾排序 適合 4 選...
一步一步寫演算法(之鍊錶逆轉)
鍊錶逆轉是面試環境中經常遇到的一道題目,也是我們在實際開發中可能會遇到的開發需求。和線性逆轉不一樣,單向鍊錶的節點需要乙個乙個進行處理。為了顯示兩者之間的區別,我們分別對線性記憶體和鍊錶進行逆 1 普通連續記憶體資料的反轉分析 cpp view plain copy status normal re...