//库函数头文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#pragma warning(disable : 4996)
//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType; //假设线性表中的元素均为整型
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode, * LinkList;
Status ListCreate_L(LinkList& L)
{
L = (LNode*)malloc(sizeof(LNode));
if (!L)exit(OVERFLOW);
L->next = NULL; //先建立一个带头结点的单链表
return OK;
}
Status List_Insert(LinkList& L)
{
ElemType t;
LNode* rearPtr, * curPtr; //一个尾指针,一个指向新节点的指针
rearPtr = L; //初始时头结点为尾节点,rearPtr指向尾巴节点
scanf("%d", &t);
while (t != -1)
{
curPtr = (LNode*)malloc(sizeof(LNode));
curPtr->data = t;
rearPtr->next = curPtr;
curPtr->next = NULL;
rearPtr = rearPtr->next;
scanf("%d", &t);
}
return OK;
}
void List_Intesection(LinkList& L1,LinkList &l2,LinkList &L3);
void ListPrint_L(LinkList& L) {
//输出单链表
LNode* p = L->next; //p指向第一个元素结点
if (!p)
{
printf("NULL");
return;
}
while (p != NULL)
{
if (p->next != NULL)
printf("%d ", p->data);
else
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
LinkList L1, L2, L3;
ListCreate_L(L1);
ListCreate_L(L2);
ListCreate_L(L3);
List_Insert(L1);
List_Insert(L2);
List_Intesection(L1, L2, L3);
ListPrint_L(L3);
}
void List_Intesection(LinkList& L1, LinkList& L2,LinkList &L3)
{
LNode *pa, *pb, *pc,*curPtr;
pa = L1->next;
pb = L2->next;
pc =L3;
while (pa && pb)
{
if (pa->data == pb->data)
{
curPtr = (LNode*)malloc(sizeof(LNode));
curPtr->data = pa->data;
curPtr->next = NULL;
pc->next = curPtr;
pc = pc->next;
pa = pa->next;
pb = pb->next;
continue;
}
if (pa->data < pb->data)
pa = pa->next;
else if (pa->data > pb->data)
pb = pb->next;
}
}