我编写了一个程序来查找两个链接列表的交集(公共元素),但它无法正常工作。我认为 intersect()函数中的while循环存在一些问题。如果有人能向我解释错误,我将非常感激。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct node{
int data;
struct node *next;
}; struct node *nw, *head, *tail, *temp;
struct node1{
int data1;
struct node1 *next1;
}; struct node1 *nw1, *head1, *tail1, *temp1;
struct node2{
int data2;
struct node2 *next2;
}; struct node2 *nw2, *head2, *tail2, *temp2, *t;
void intersect(){
printf("\nINTERSECTION OF LINKED LIST \n");
temp=head;
temp1=head1;
while(temp->next!=NULL && temp1->next1!=NULL)
{
temp->next=head;
while(temp->data != temp1->data1 && temp->next!=NULL)
{
temp=temp->next;
/* PROBLEM is with this loop it doesnt increment and hence become infinte. */
}
if(temp->data == temp1->data1)
{
printf("Common Element : %d\t", temp1->data1);
}
}
}
int main(){
int n,i,item,item1;
printf("Enter the number of nodes of 1st Linked List");
scanf("%d", &n);
nw=(struct node *)malloc(sizeof(struct node));
nw->data=NULL;
nw->next=NULL;
head=nw;
tail=nw;
for(i=0;i<n;i++){
printf("Enter the item ");
scanf("%d", &item);
if(head->data==NULL)
head->data=item;
else{
nw=(struct node *)malloc(sizeof(struct node));
nw->data=item;
nw->next=NULL;
tail->next=nw;
tail=nw;
}
}
printf("Enter the number of nodes for second LL");
scanf("%d", &n);
nw1=(struct node1 *)malloc(sizeof(struct node1));
nw1->data1=NULL;
nw1->next1=NULL;
head1=nw1;
tail1=nw1;
for(i=0;i<n;i++){
printf("Enter the item ");
scanf("%d", &item1);
if(head1->data1==NULL)
head1->data1=item1;
else{
nw1=(struct node1 *)malloc(sizeof(struct node1));
nw1->data1=item1;
nw1->next1=NULL;
tail1->next1=nw1;
tail1=nw1;
}
}
temp=head;
while(temp!=NULL){
printf("%d ", temp->data);
temp=temp->next;
}
printf("\n\n\n\n\n");
temp1=head1;
while(temp1!=NULL){
printf("%d ", temp1->data1);
temp1=temp1->next1;
}
intersect();
getch();
}
答案 0 :(得分:1)
您需要一个嵌套的for
/ while
循环来查找所有常用项。以下代码中的某些内容应该有效。
void intersect(){
printf("\nINTERSECTION OF LINKED LIST \n");
temp=head;
temp1=head1;
for ( ; temp != NULL; temp = temp->next )
{
for ( temp1 = head1; temp1 != NULL; temp1 = temp1->next )
{
if(temp->data == temp1->data1)
{
printf("Common Element : %d\t", temp1->data1);
}
}
}
}