C İki bağlantılı liste ek ve sıralama

İki bağlantılı liste alması ve bir araya getirmesi gereken bir fonksiyonum var.

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

Bunu sıralamak istiyorum ama while döngüsünü bununla değiştirdiğimde segmentasyon hatası alıyorum:

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() işlevi, yalnızca bir yapı düğümüne bazı veriler ekler:

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
Sadece bunun tamamen listeyi sıralamayacağını anladım.
katma yazar Riz Baltazar, kaynak

3 cevap

Bu senin problemini çözer. Çünkü ikisini birden denemediğinizde, ilk karşılaştırmayı gerçekleştiremezsiniz.

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;
      }
 }
2
katma
ahh, tamam teşekkür ederim. Muhtemelen öğretmenleri dinlemeli ve test planları yazmalıyım
katma yazar Riz Baltazar, kaynak
while(first != NULL || second != NULL ){

This will keep iterating as long as any of them is != NULL, so either you have to change your condition to && or check within the while body if either one of them is NULL.

0
katma

Since you're moving to the next nodes separately, one of them reaches NULL before the algorithm is finished. When this happens, your if condition crashes because your trying to access the data attribute of NULL

0
katma