C++算法之链表重合的代码

2019-01-19  本文已影响0人  xintiantian

下面的资料是关于C++算法之链表重合的代码。

    while(pLink){ 

        if(pLink == pNode) 

            return 1; 

        pLink = pLink->next; 

    } 

    return 0; 

    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; 

另外一种方法就是计数的方法,既然链表在某处重合,那么此点访问的次数就是2,所以我们可以依次把两个链表遍历一下,最后查看有没有节点的count为2即可。

typedef struct _LINK_NODE 

    int data; 

    int count; 

}LINK_NODE; 

    assert(NULL != pNode); 

    while(pNode){ 

        pNode->count ++; 

        pNode = pNode->next; 

    } 

从计数的方法,我们可以发现如果两个链表是重合的,那么他们的最后一个节点必然是相同的,所以只要判断最后一个节点是否相同即可。

    assert(NULL != pLinkOne && NULL != pLinkTwo); 

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

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

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

总结:1)链表重合的题目虽然简单,但是从不同的角度可以有不同的答案;2)本题目来自《编程之美》,如果对解法还有兴趣的朋友可以参考《编程之美》。

上一篇下一篇

猜你喜欢

热点阅读