Создание проблемы двойного связанного списка - PullRequest
0 голосов
/ 24 сентября 2019

Наше задание - сначала создать двойной связанный список, а затем отсортировать его.Я сейчас застрял на первой части.По какой-то причине второй узел не добавляется до тех пор, пока третий узел не будет создан, и это будет продолжаться на всех, пока я не войду в последний узел, который не включен, но вместо этого добавлен узел со значением 0.

#include <stdio.h>
#include <stdlib.h>
#include "node.h"
#include "node.c"


int main(){
    printf("Enter the values, once finished enter 0 to stop.\n");
    int v;
    scanf("%d",&v);
    struct mynode headnode = {v};
    struct mynode *hpoint = &headnode;
    struct mynode **hpointp = &hpoint;
    while (v!=0){
        struct mynode *nn1 = (struct mynode*)malloc(sizeof(struct mynode));
        struct mynode *endnode = *hpointp;
        scanf("%d",&nn1->value); // using this because value is a constant in mynode and it wont let me write to it directly
        nn1->next = NULL;
        v = nn1->value;
        if (v == 0){
            free(nn1);
            break;
        }

            while(endnode->next != NULL){
                endnode = endnode->next;
            } 

        endnode->next = nn1;
        nn1->prev = endnode;
        printlist(hpoint);
    }
    printlist(hpoint);

    return 0;

}




here is the printlist function as well just in case i made a mistake there.


void printlist(struct mynode* n){
    if (n->next == NULL && n->prev == NULL ){
        printf("%d",n->value);
    }

    while (n->next != NULL){
        printf("%d <===> ",n->value);
        n = n->next;
        if (n->next == NULL){
            printf("%d\n",n->next);
        } 
    }
}

наконец, вот заголовочный файл узла

#ifndef node_h
#define node_h

struct mynode{
    int const value;
    struct mynode *next;
    struct mynode *prev;
};

//struct mynode *insertsort(struct mynode*);

void printlist(struct mynode*);

#endif

1 Ответ

1 голос
/ 24 сентября 2019

Ваша функция печати выглядит сложной.Вы можете просто зацикливаться, пока n не станет NULL и напечатать значения.

void printlist(struct mynode* n){
    while(n) {
        printf("%d <===>",n->value);
        n=n->next;
    }
    printf("0");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...