编程之美 3.6 判断两个链表是否相交

问题本身很简单,考虑扩展问题:如果链表有环的话,又或者求解相交的第一个节点,个人认为都是采用计数的方法比较适合。也就是说设置一个hash表,记录指针指向的地址,无论求是否有环或者找到第一个相交的节点都可以。唯一缺点是需要额外的空间。

书上提到的第三个解法有些需要注意的地方:它不是一个线程安全的,因为在这个过程中,它改变的链表的结构(虽然最终会修改回来)。而且这种比较类型的功能函数一般都不应该更改它的值。

LNode* JudgeIntersect(LNode *la, LNode *lb){
    LNode *p = la, *q = lb;
    while(p != NULL){
        addrs.insert(p);
        p = p->next;
    }
    LSet::iterator end = addrs.end();
    while(q != NULL){
        LSet::iterator iter = addrs.find(q);
        if(iter != end)
            return *iter;
        q = q->next;
    }
    return NULL;
}

 

posted on 2012-12-21 14:39  小龙人2012  阅读(159)  评论(0编辑  收藏  举报

导航