将节点添加到升序链接列表
我在这里见过一些类似的东西,但那对我没有帮助。所以无论我错在哪里,请纠正我。
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node* link;
};
struct node* head = NULL;
void add(int);
void print();
int main()
{
add(1); print();
add(2); print();
add(5); print();
add(4); print();
add(3); print();
return 0;
}
***/* if list is empty or if new node is to be inserted before the first node*/***
void add( int num)
{
struct node* temp;
temp = head;
struct node* newNode = (struct node*)malloc(sizeof(struct node));
newNode->data = num;
newNode->link = NULL;
if((head == NULL)||( head->data > num))
{
newNode->link = head;
head = newNode;
}
else
{
***/* traverse the entire linked list to search the position to insert the new node*/***
while(temp!=NULL)
{
if(temp->data <= num && ( temp->link->data > num || temp->link == NULL))
{
newNode->link = temp->link;
temp->link = newNode;
return;
}
temp= temp->link;
}
}
}
***/*Display the content of the linked list*/***
void print()
{
struct node* temp;
temp = head;
while(temp!=NULL)
{
printf("%d", temp->data);
temp=temp->link;
}
printf("\n");
}
运行此代码时,o/p是:
1个
分段故障(堆芯转储)
请帮助我,如何解决这个问题
最佳答案
罪魁祸首是这句话:
if(temp->data <= num && ( temp->link->data > num || temp->link == NULL))
在评估之前,您没有检查
temp->link
是否不是NULL
。更改为:if(temp->data <= num && ( temp->link == NULL || temp->link->data > num))
利用短路评估使其安全。