首页 > 解决方案 > 链表相同检查

问题描述

我需要传递 head 引用来创建用于创建 2 个链表 head1 和 head2 的函数,并检查它们是否相同。我正在尝试将头指针地址传递给 create() 并直接对其进行处理。我如何做到这一点。

#include<stdio.h>
#include<stdlib.h>
struct node {
    int data; 
    struct node* next;
};
struct node *head1=NULL,*head2=NULL;
void create(int data,struct node *head) {
    struct node *newnode=(struct node *) malloc(sizeof( struct node));
    newnode->data=data;
    newnode->next=NULL;
    if(head==NULL)
        head=newnode;
    else {
        struct node *temp=head;
        while(temp->next!=NULL)
            temp=temp->next;
        temp->next=temp;
    }   
}
void identical(struct node *head3,struct node *head4) {
    struct node *temp1=head3,*temp2=head4;
    int f=0;
    while(temp1!=NULL&&temp2!=NULL) {
        if(temp1->data!=temp2->data) {
            f=1;
            break;
        }
    }
        temp1=temp1->next;
        temp2=temp2->next;
        if(f==1||temp1||temp2)
            printf("\nNon identical");
        else
            printf("\nIdentical"); 
}
int main() {
    int n,val;
    scanf("%d",&n);
    for(int i=0;i<n;i++) {
        scanf("%d",&val);
        create(val,&head1);
    }
    scanf("%d",&n);
    for(int i=0;i<n;i++) {
        scanf("%d",&val);
        create(val,&head2);
    }
    identical(&head1,&head2);
    return 0;
}

当我使用 *head 访问地址时,它会在 if 条件 if(*headref==NULL) 中引发错误

void addend(node **headref,int data){
    node* temp1=*headref;
    if(*headref==NULL){
        *headref=(node*)malloc(sizeof(node));
        ((*headref)->data)=data;
        ((*headref)->next)=NULL;
    }else{
        node* temp=*headref;
        while(temp->next!=NULL){
            temp=temp->next;
        }
        temp->next=createnewnode(data,NULL);
    }
}
int main(){
node *head1=NULL;
node *head2=NULL;
addend(&head1,11);
addend(&head1,12);
}

标签: clinked-list

解决方案


#include<stdio.h>
#include<stdlib.h>
struct node {
    int data; 
    struct node* next;
};
struct node *head1=NULL,*head2=NULL;
void create(int data) {
    struct node *newnode=(struct node *) malloc(sizeof( struct node));
    newnode->data=data;
    newnode->next=NULL;
    if(head1==NULL)
        head1=newnode;
    else {
        struct node *temp=head1;
        while(temp->next!=NULL)
            temp=temp->next;
        temp->next=newnode;
    }   
}
void create1(int data) {
    struct node *newnode=(struct node *) malloc(sizeof( struct node));
    newnode->data=data;
    newnode->next=NULL;
    if(head2==NULL)
        head2=newnode;
    else {
        struct node *temp=head2;
        while(temp->next!=NULL)
            temp=temp->next;
        temp->next=newnode;
    }   
}
void identical() {
    struct node *temp1=head1,*temp2=head2;
    int f=0;
    while(temp1!=NULL&&temp2!=NULL) {
        if(temp1->data!=temp2->data) {
            f=1;
            break;
        }
        temp1=temp1->next;
        temp2=temp2->next;
    }
        if(f==1||temp1||temp2)
            printf("\nNon identical");
        else
            printf("\nIdentical"); 
}
int main() {
    int n,val;
    scanf("%d",&n);
    for(int i=0;i<n;i++) {
        scanf("%d",&val);
        create(val);
    }
    scanf("%d",&n);
    for(int i=0;i<n;i++) {
        scanf("%d",&val);
        create1(val);
    }
    identical();
    return 0;
}

推荐阅读