微软面试100道之7 判断俩个链表是否相交

本文介绍了一种判断两个单向链表是否相交的方法,并提供了一个C++实现示例。该方法通过遍历两个链表直至尾部节点,比较这两个尾部节点是否相同来判断链表是否相交。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第7题(链表)
微软亚院之编程判断俩个链表是否相交
给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。
为了简化问题,我们假设俩个链表均不带环。

问题扩展:
1.如果链表可能有环列?
2.如果需要求出俩个链表相交的第一个节点列?


以下是以按没有环来设计:


#include <iostream >

using namespace std ;

struct LinkNode  {
    int data;
    LinkNode * next;
};


void initLinkList(LinkNode * & qq) {
    LinkNode* pCur;
    pCur = qq;

    cout<<"输入数据"<<endl;
    while(1) {
        LinkNode * q = new LinkNode;
        int m;
        
        cin>>m;
        if(m==0) {
            break;
        }
        else {
        q->data    = m;
        q->next = NULL;
        pCur->next = q;
        pCur = pCur->next;    
        }
    }

}


LinkNode* Travese(LinkNode* list){
    LinkNode * pCur;
    pCur = list->next;

    while(pCur->next) {
        pCur = pCur->next;    
    }
    return pCur;
}

void haveSmall(LinkNode * list1,LinkNode * list2) {
    LinkNode * p1;
    LinkNode * p2;
    p1 = Travese(list1);
    p2 = Travese(list2);
    if(p1==p2) cout<<"有相同节点"<<endl;
    else  cout<<"无相同节点"<<endl;
    delete p1;
    delete p2;
}


int main() {
    LinkNode *p1;
    LinkNode * p = new LinkNode;
    p->next = NULL;
    p1 = p;
    initLinkList(p);

    LinkNode *q1;
    LinkNode * q = new LinkNode;
    q1 = q;
    q->next = NULL;
    initLinkList(q);


    for(int i=0;i<3;i++) {
        p1 = p1->next;
    }

    for(int j=0;j<3;j++) {
        q1 = q1->next;
    }

    

    p1->next = q1;
    haveSmall(p,q);
    delete p1;
    delete p;
    delete q;
    delete q1;


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值