学数据结构最好,跟着一点一点来慢慢理解,
#include "stdio.h"
#include "stdlib.h"
// 线性表的节点结构体
typedef struct {
int data;//保存节点数据
struct Node *next;//指向下一个节点
}Node;
// 显示所有元素
void printList(Node *head)
{
int i;
printf("\n所有元素:");
Node* p = head;//定义一个指针首先指向头结点
while (p->next != NULL)
{
p = p->next;
printf("%d ", p->data);
}
}
// 插入元素
int insertData(Node *head, int index, int input)
{
int i = 0;//当前位置
Node* temp = (Node*)malloc(sizeof(Node));//临时节点
if (index == 0) //第一个位置插入元素
{
temp->data = input;
temp->next = head->next;
head->next = temp;
return 1;
}
Node* p = head;//定义一个指针首先指向头结点
while (p->next != NULL)
{
p = p->next;
i++;
if (i == index) {//找到插入位置
temp->data = input;
temp->next = p->next;
p->next = temp;
return 1;
}
}
return 1;
}
//求两个链表交集
void f(Node *t1,Node *t2,Node *t3){
Node *p,*q,*temp,*r=t3->next;
for(p=t1->next;p!=NULL;p=p->next){
for(q=t2->next;q!=NULL;q=q->next){
if(p->data==q->data){
temp=(Node*)malloc(sizeof(Node));//创建新的结点
temp->data=p->data;//给新节点赋值,交际部分数据
temp->next=NULL;
r->next=temp;//公共链表链接新节点
r=temp;//以便下一步操作
}
}
}
}
// 入口
int main()
{
Node head;//头部节点实际上就代表了一个链表
head.data = 0;//头部节点存储的数据没意义
head.next = NULL;//刚开始没有数据节点
insertData(&head, 0, 1);
insertData(&head, 1, 2);
insertData(&head, 2, 3);
insertData(&head, 3, 4);
insertData(&head, 4, 5);
//生成第二个单链表
Node table2;
table2.data=0;
table2.next=NULL;
insertData(&table2, 0, 3);
insertData(&table2, 1, 9);
insertData(&table2, 2, 1);
insertData(&table2, 3, 4);
insertData(&table2, 4, 2);
//生成第三个链表求交集
Node table3;
table3.data=0;
table3.next=NULL;
insertData(&table3, 0, 0);
printList(&head);
printList(&table2);
printf("交集结果\n");
f(&head,&table2,&table3);
printList(&table3);
return 0;
}