8,给定两个单链表,编写算法找出两个链表的公共结点。
思路:双层循环,比较
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<vector>
#include<queue>
#include<set>
using namespace std;
// 链表节点结构
typedef struct Node{
int data;
struct Node * next;
Node(): next(NULL){};
Node(int data):data(data), next(NULL){};
}Node, *LinkList;
// 输出单链表
void show(LinkList L){
Node *p = L->next;
while(p){
cout<<p->data<<endl;
p = p->next;
}
}
LinkList findCommonNodes(LinkList L1, LinkList L2){
LinkList L = new Node();
Node *p = L1->next;
while(p){
Node *q = L2->next;
while(q){
if(p->data == q->data){
Node *f = new Node(p->data);
f->next = L->next;
L->next = f;
break;
}
q = q->next;
}
p = p->next;
}
return L;
}
// 头插创建链表
void createListFromHead(vector<int> v, LinkList &L){
// 创建头
L = new Node();
// 生成链表
for(int i=0; i<v.size(); i++){
Node *p = new Node(v.at(i));
p->next = L->next;
L->next = p;
}
}
int main(){
int a[]={1,2,3,4,5,6};
int b[]={2,3,4,5,1,7};
vector<int> V(a, a+6);
vector<int> V2(b, b+6);
LinkList L, L2;
createListFromHead(V, L);
createListFromHead(V2, L2);
// show(L);
// cout<<endl;
show(findCommonNodes(L, L2));
return 0;
}