在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)分析&挖掘/ 鏈表重合
hash表
單詞統(tǒng)計
鏈表排序
查找
可變參數(shù)
爬樓梯
內(nèi)存
prim算法 中
線性結(jié)構(gòu)的處理
數(shù)據(jù)選擇
prim算法 上
循環(huán)單向鏈表
基數(shù)排序
堆排序
鏈表重合
排序二叉樹的保存和加載
圖添加和刪除
排序二叉樹線索化
非遞歸排序
字符串查找 下篇
鏈表逆轉(zhuǎn)
函數(shù)堆棧顯示
遞歸和堆棧
二叉樹深度遍歷
線性隊列
循環(huán)和遞歸
快速排序
尋找丟失的數(shù)
A*算法
克魯斯卡爾算法 下
排序二叉樹
大數(shù)計算
二叉樹廣度遍歷
prim算法 下
洗牌算法
圖結(jié)構(gòu)
最大公約數(shù)、最小公倍數(shù)
圖創(chuàng)建
雙向鏈表
字符串查找 上篇
尋路
通用算法的編寫
哈夫曼樹 下
線性堆棧
八皇后
排序二叉樹刪除-1
挑選最大的n個數(shù)
字符串查找 中篇
哈夫曼樹 上
合并排序
回數(shù)
選擇排序
哈希二叉樹
通用數(shù)據(jù)結(jié)構(gòu)
“數(shù)星星”
單向鏈表
排序二叉樹插入
圖的保存
排序二叉樹刪除-2
排序二叉樹刪除-3
n!中末尾零的個數(shù)統(tǒng)計

鏈表重合

鏈表重合是一個好玩的問題。原題目是這樣的:有兩個鏈表,那么如何判斷這兩個鏈表是不是重合的?至于這個鏈表在什么時候重合的,這不重要,關(guān)鍵是判斷這個鏈表究竟有沒有重合。究竟有什么方法呢?

最簡單的方法就是查看兩者有沒有共同點。那么依次判斷就行了。

    int find_node_in_link(LINK_NODE* pLink, LINK_NODE* pNode)
    {
        while(pLink){
            if(pLink == pNode)
                return 1;
            pLink = pLink->next;
        }

        return 0;
    }

    STATUS find_if_link_merge(LINK_NODE* pLinkOne, LINK_NODE* pLinkTwo)
    {
        LINK_NODE* pHead;

        if(NULL == pLinkOne || NULL == pLinkTwo)
            return FALSE;

        pHead = pLinkTwo;
        while(pHead){
            if(find_node_in_link(pLinkOne, pHead))
                return TRUE;
            pHead = pHead->next;
        }

        return FALSE;
    }

另外一種方法就是計數(shù)的方法,既然鏈表在某處重合,那么此點訪問的次數(shù)就是2,所以我們可以依次把兩個鏈表遍歷一下,最后查看有沒有節(jié)點的count為2即可。

    typedef struct _LINK_NODE
    {
        int data;
        int count;
        struct _LINK_NODE* next;
    }LINK_NODE;

    void process_all_link_node(LINK_NODE* pNode)
    {
        assert(NULL != pNode);

        while(pNode){
            pNode->count ++;
            pNode = pNode->next;
        }
    }

從計數(shù)的方法,我們可以發(fā)現(xiàn)如果兩個鏈表是重合的,那么他們的最后一個節(jié)點必然是相同的,所以只要判斷最后一個節(jié)點是否相同即可。

    STATUS find_if_link_merge(LINK_NODE* pLinkOne, LINK_NODE* pLinkTwo)
    {
        assert(NULL != pLinkOne && NULL != pLinkTwo);

        while(pLinkOne->next) pLinkOne = pLinkOne->next;
        while(pLinkTwo->next) pLinkTwo = pLinkTwo->next;

        return (pLinkOne == pLinkTwo) ? TRUE : FALSE;
    }

總結(jié):

(1)鏈表重合的題目雖然簡單,但是從不同的角度可以有不同的答案;

(2)本題目來自《編程之美》, 如果對解法還有興趣的朋友可以參考《編程之美》。

上一篇:回數(shù)下一篇:基數(shù)排序