【发布时间】:2019-10-16 18:07:07
【问题描述】:
过去几天我一直在尝试在 c 中实现链表操作,但我一次又一次地遇到同样的错误,上面写着“Segmentation Error Core Dumped”。我无法弄清楚逻辑的哪一部分出了问题。奇怪的是,在解决了所有警告和错误之后,代码却没有执行。如果有人指出我是否正确使用了链表和指针,那也很棒。我的代码似乎很大,但我无法缩短它。再一次,我将感谢所有可以帮助我并使这段代码更具可读性并减少歧义的人。
#include<stdio.h>
#include<stdlib.h>
struct nodes
{
int data;
struct nodes* next;
};
typedef struct nodes* node;
node head=NULL;
void InsertFront()
{
node temp=NULL;
printf("Enter The Value Of Node\n");
scanf("%d",&temp->data);
if(head==NULL)
{
head->data=temp->data;
}
else
{
temp->next=head;
head=temp;
}
}
void InsertBack()
{
node temp,newnode;
printf("Enter The Value Of Node\n");`enter code here`
scanf("%d",&newnode->data);
if(head==NULL)
{
head->data=newnode->data;
}
else
{
temp=head;
while(temp->next!=NULL)
{
temp=temp->next;
}
newnode=temp->next;
}
}
void InsertPosition()
{
node previousnode,newnode,nextnode,temp;
int position,count=0;
printf("Enter the Position At Which New Node Has To Be Inserted");
scanf("%d",&position);
printf("Enter The Value Of Node\n");
scanf("%d",&newnode->data);
if(head==NULL)
{
head->data=newnode->data;
}
else
{
temp=head;
while(temp->next!=NULL && count<position);
{
previousnode=temp;
temp=temp->next;
count=count+1;
nextnode=temp;
}
previousnode->next=newnode;
newnode->next=nextnode;
}
}
void DeleteFront()
{
node temp;
if(head->next==NULL)
{
head==NULL;
}
else
{
head->next=temp;
head=NULL;
head=temp;
}
}
void DeleteBack()
{
node temp;
if(head->next==NULL)
{
head==NULL;
}
else
{
temp=head;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp=NULL;
}
}
void DeletePosition()
{
node temp,nextnode,deletenode;
int position,count=0;
printf("Enter The Position At Which The Node Has To Be Deleted");
scanf("%d",&position);
if(head->next==NULL)
{
head==NULL;
}
else
{
temp=head;
while(temp->next!=NULL && count!=position)
{
temp=temp->next;
count=count+1;
}
deletenode=temp->next;
nextnode=deletenode->next;
deletenode->next=NULL;
temp->next=nextnode;
}
}
void Display()
{
node temp;
temp=head;
if(head==NULL)
{
printf("Linked List Seems To Be Empty");
}
while(temp->next!=NULL)
{
printf("%d -> ",temp->data);
}
}
int main()
{
int choice;
printf("\nLINKED LIST OPERATIONS\n\n");
printf("Select An Option\n1 - Insert From Front\t 2 - Insert From Back\n3 - Insert At
A Position 4 - Delete At The Front\n5 - Delete At The Back\t 6 - Delete At A
Position\n7 - Display\t 8 - Exit\n\n");
scanf("%d",&choice);
switch(choice)
{
case(1) :
{
InsertFront();
}
case(2) :
{
InsertBack();
}
case(3) :
{
InsertPosition();
}
case(4) :
{
DeleteFront();
}
case(5) :
{
DeleteBack();
}
case(6) :
{
DeletePosition();
}
case(7) :
{
Display();
}
case(8) :
{
exit(0);
}
default :
{
printf("Invalid Input\n");
exit(0);
}
}
}
【问题讨论】:
-
我没有看所有代码,但立即看到了这个:
if(head==NULL) { head->data=newnode->data; }。您正在取消引用NULL指针。你不能那样做。 -
如何在不引用 NULL 指针的情况下编辑代码
-
只是建议,尝试调试工具来解决此类错误(例如 Valgrind)。
-
请先清理您的警告。你有一些像“head==NULL;”这样的行这不是你想要的。这将解决您的一些问题。
-
你可能想要:
if (head == NULL) { head = newnode;}
标签: c pointers data-structures linked-list singly-linked-list