C Два связанных списка добавляют и сортируют - PullRequest
0 голосов
/ 28 октября 2011

У меня есть функция, которая должна взять два связанных списка и соединить их.

    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 ]

2 голосов
/ 28 октября 2011

Это решает вашу проблему. Потому что, если вы не проверяете оба, вы не можете выполнить первое сравнение.

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;
      }
 }
0 голосов
/ 28 октября 2011

Поскольку вы переходите к узлам next по отдельности, один из них достигает NULL до завершения алгоритма.Когда это происходит, ваше условие if падает, потому что вы пытаетесь получить доступ к атрибуту data NULL

0 голосов
/ 28 октября 2011
while(first != NULL || second != NULL ){

Это будет повторяться до тех пор, пока любое из них равно != NULL, поэтому либо вы должны изменить свое условие на &&, либо проверить в теле while, если один из них равен NULL.

...