C Екі байланыстырылған тізім қосу және сұрыптау

Менде екі байланыстырылған тізімді алып, оларды біріктіретін функция бар.

    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(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
Мен бұл жай ғана тізімді толығымен іріктемейтінін түсіндім
қосылды автор Riz Baltazar, көзі

3 жауаптар

Бұл мәселені шешеді. Себебі сіз екеуін де сынамасаңыз, бірінші салыстыруды жүзеге асыра алмайсыз.

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
қосылды
ahh, ok thankyou. Мүмкін, мұғалімдерді тыңдап, сынақ жоспарларын жазуым керек
қосылды автор Riz Baltazar, көзі
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
қосылды

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
қосылды