将节点添加到升序链表中
我在这里看到了一些类似的东西,但对我没有帮助。所以请纠正我哪里错了。
#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))
利用短路评估使其安全。