#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条件一起,我的代码不起作用,程序崩溃。 请帮我纠正这个错误。我有一种感觉,我做了一些我无法找到的蠢事。
答案 0 :(得分:1)
当列表为空并且您添加第一个元素时,您忘记退出,而是继续执行您的功能。尝试这样的事情
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;
}
}
答案 1 :(得分:0)
你应该小心使用全局变量,最好完全避免它们。 在函数insert_front()中,您可以更改列表的头部...
约翰