gpt4 book ai didi

c - 链表-插入新节点

转载 作者:行者123 更新时间:2023-11-30 15:29:46 26 4
gpt4 key购买 nike

  #include<stdio.h>
#include<stdlib.h>
//Linked list implementation

typedef struct SLL{

int info;
struct SLL *link;

}Node;

Node *head=NULL;
// Node *rear=NULL;

void insert_rear(int x)
{

Node *temp=malloc(sizeof(Node));
Node *temp1=NULL;

if(temp==NULL) /* When malloc is unable to fetch Memory */
{
printf("\n Insufficient memory");
}

if(head==NULL) /* When there is no node created */
{
temp->info=x;
temp->link=head;
head=temp;
}

else
temp1=head;

while(temp1->link!=NULL)
{
temp1=temp1->link;
}
printf("\n Temp1=%d",temp1);
temp->info=x;
temp->link=NULL;
temp1->link=temp;

}


void insert_front(int x)
{

Node *temp=malloc(sizeof(Node));
if(temp==NULL) /* When malloc is unable to fetch Memory */
{
printf("\n Insufficient memory");
}
temp->info=x;
temp->link=head;
head=temp;

}

void display()
{
int i=0;
Node *temp=head;
printf("\n List Elements: \n ");

while(temp!=NULL)
{
printf(" %d) %d",++i,temp->info);
temp=temp->link;
printf("\t Link= %u \n",temp);
} printf("\n");
}


void main()
{
int x,choice,i;
printf("\n To insert at front enter 1 \n To insert at rear enter 2 \n To exit enter 4 \n");
while(choice!=4)
{
scanf("%d",&choice);
switch(choice)
{

case 1: printf("Enter an ELEMENT to be inserted at FRONT \n");
scanf("%d",&x);
insert_front(x);
display();
break;

case 2: printf("Enter an ELEMENT to be inserted at LAST \n");
scanf("%d",&x);
insert_rear(x);
display();
break;


}//End of switch

}//End of while
}//End of main

我正在编写这个链表程序,并且在insert_rear()中遇到了一个问题。功能。当我使用 insert_front() 添加一些元素时然后使用 insert_rear() 在后面添加元素以及现有节点这些程序运行得很好。但是当我尝试使用 insert_rear() 添加没有任何现有节点的节点时我的程序由于某种原因无法运行。

因此,我花了一些时间修改我的程序,并删除了以下部分代码,看看是否能够在没有任何现有节点的情况下添加新节点:

else
temp1=head;

while(temp1->link!=NULL)
{
temp1=temp1->link;
}
printf("\n Temp1=%d",temp1);
temp->info=x;
temp->link=NULL;
temp1->link=temp;

}

它确实有效,即只需使用以下代码,我就可以在拥有任何现有节点之前添加到新节点

    if(head==NULL) /* When there are no existing nodes created */
{
temp->info=x;
temp->link=head;
head=temp;
}

但是随着 else 条件的出现,我的代码无法工作并且程序崩溃了。请帮我纠正这个错误。我有一种感觉,我做了一些愚蠢的事情,但我找不到。

最佳答案

当列表为空并且添加第一个元素时,您忘记退出,而是在函数中继续向下。尝试这样的事情

void insert_rear(int x)
{
Node *temp=malloc(sizeof(Node));
Node *temp1=NULL;

temp->info=x;
temp->link=NULL;

if(temp==NULL) /* When malloc is unable to fetch Memory */
{
printf("\n Insufficient memory");
abort();
}

if(head==NULL) /* When there is no node created */
{
head=temp;
}
else
{
temp1=head;

while(temp1->link!=NULL)
{
temp1=temp1->link;
}
printf("\n Temp1=%d",temp1);
temp1->link=temp;
}
}

关于c - 链表-插入新节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26056571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com