C两个链表追加和排序

时间:2011-10-27 20:41:46

标签: c sorting struct linked-list

我有一个功能,它应该带两个链接列表并将它们组合在一起。

    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;
};

3 个答案:

答案 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条件崩溃了