第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;
}