C Twee gekoppelde lijst toevoegen en sorteren

Ik heb een functie die verondersteld wordt twee gekoppelde lijsten te nemen en ze samen te voegen.

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

Ik wil het sorteren, maar ik blijf een segmentatiefout krijgen wanneer ik de while-loop hiermee vervang:

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

De functie Push() voegt gewoon enkele gegevens toe aan een struct node:

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
Ik heb me net gerealiseerd dat dit de lijst niet eens volledig zal sorteren
toegevoegd de auteur Riz Baltazar, de bron

3 antwoord

Dit lost uw probleem op. Omdat als u punt niet allebei test, u niet de eerste vergelijking kunt uitvoeren.

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
toegevoegd
ahh, ok bedankt. Ik zou waarschijnlijk naar de leraren moeten luisteren en testplannen moeten schrijven
toegevoegd de auteur Riz Baltazar, de bron
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
toegevoegd

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
toegevoegd