我正在对链表进行练习。当我在列表开头输入值并且值小于列表中的值时,它会起作用。但是当数字更大时,我会遇到分段错误。有人想下面的代码有什么问题吗?
//标题(称为headeroef):
typedef struct node
{
int n;
struct node* next;
} node;
//其他代码
#include <cs50.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include "headeroef.h"
void insert(void);
void traverse(void);
node* first = NULL;
int main (void)
{
int c;
do
{
printf("Print instructions: \n"
"1. insert\n"
"2. Delete\n");
printf("Command: ");
c = GetInt();
switch(c)
{
case 1: insert(); break;
}
}
while (c!=0);
}
void insert(void)
{
node* newPtr = malloc(sizeof(node));
printf("Number to insert: \n");
newPtr->n = GetInt();
newPtr->next = NULL;
if (first == NULL)
{
first = newPtr;
}
else if(newPtr->n < first->n)
{
newPtr->next = first;
first = newPtr;
}
else
{
node* predPtr = first;
//Dit houdt dus als in als aan deze else wordt voldaan!
while (true)
{
if (predPtr->n == newPtr->n)
{
free(newPtr);
break;
}
else if (predPtr->next->n > newPtr->n)
{
//Hiermee doe je weer die swap
newPtr->next = predPtr->next;
predPtr->next = newPtr;
break;
}
//Uitzoeken waarom hier een segmentation fault komt.s
}
}
traverse();
}
void traverse(void)
{
printf("The list is now\n");
node* ptr = first;
while (ptr!=NULL)
{
printf("%i\n", ptr->n);
ptr = ptr->next;
}
}