我有一个功能,它应该带两个链接列表并将它们组合在一起。
void Append(struct node** aRef, struct node** bRef){
struct node* first = *aRef;
struct node* second = *bRef;
struct node* temp = NULL;
while(first != NULL || second != NULL){
Push(&temp, first->data);
Push(&temp, second->data);
first = first->next;
second = second->next;
}
*aRef = temp;
DeleteList(&second);
}
我想对它进行排序但是当我用这个替换while循环时我一直遇到分段错误:
while(first != NULL || second != NULL){
if(first->data < second->data){
Push(&temp, first->data);
first = first->next;
}
else{
Push(&temp, second->data);
second = second->next;
}
}
Push()函数只是向结构节点添加了一些数据:
void Push(struct node** headRef, int data){
struct node* new = malloc(sizeof(struct node));
new->data = data;
new->next = *headRef;
*headRef = new;
}
struct node{
int data;
struct node* next;
};
答案 0 :(得分:2)
这解决了您的问题。因为如果你没有测试两者,你就无法进行第一次比较。
while(first != NULL || second != NULL){
if((first != NULL && second != NULL && first->data < second->data) || (first != NULL && second == NULL)){
Push(&temp, first->data);
first = first->next;
}
else if (second != NULL) {
Push(&temp, second->data);
second = second->next;
}
}
答案 1 :(得分:0)
while(first != NULL || second != NULL ){
只要其中任何一个为!= NULL
,这将继续迭代,因此您必须将条件更改为&&
或在while
正文中检查其中任何一个是否为NULL
{{1}}。
答案 2 :(得分:0)
由于您要分别转移到next
个节点,因此在算法结束之前,其中一个节点会到达NULL
。发生这种情况时,由于您尝试访问if
data
属性,因此NULL
条件崩溃了