c - 链表相同检查
问题描述
我需要传递 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);
}
解决方案
#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;
}
推荐阅读
- c++ - c++ | 冻伤引擎 - 不明白收到的答案?
- kentico - 更改 Kentico 站点的显示名称会取消默认样式表的关联
- angularjs - AngularJS ui-router 如何为同一个状态做多个 URL 变体——比如 ngRoute 时
- amazon-s3 - s3 客户端 get_object(Range=byte_range) 无法检索对象的第一个字节
- php - 从 MySql/PHP 为每行创建新的 HTML 表
- node.js - ionic 2项目中的离子服务返回错误
- tsql - SSRS 报告生成 #Error 没有详细信息
- python - 如何遍历列表并将每个元素作为包含自身作为唯一元素的列表传递?
- c# - Roslyn 对象初始化新关键字
- python - 无法将 pandas 数据帧写入 csv,出现 IO 错误