Не получить измененный связанный список после изменения - PullRequest
0 голосов
/ 19 мая 2019

Я создал связанный список и вернулся по ссылке, по какой-то причине после отправки его в другую функцию он не вернется с изменениями, если я не отправлю его снова по ссылке, какое-либо объяснение, почему?

если я просто отправляю "lst" в функцию как lst без "&", когда он возвращается из функции, я получаю только нечетный список, когда я использовал отладчик внутри функции, я видел списокс четными значениями (которые также должны быть в основном), как мне кажется, должно быть так, поскольку lst является базовым адресом, как массив, или я ошибаюсь?

#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int data;
    struct node *next;
}node;

node* get_lst(node **linked_lst);
node *createList2(node** L);

void main() {
    node *odd_node = NULL, *lst = NULL;
    get_lst(&lst);//get values for the original list
    odd_node = createList2(&lst);//get an odd list
    getch();

}
node *createList2(node **L)
{
    node * tList = *L, odd_lst;
    node *temp_odd = &odd_lst;
    temp_odd->next = NULL;

    //first element in the list is odd
    while (tList != NULL && tList->data % 2)
    {

        temp_odd->next = tList;
        tList = tList->next;
        *L = tList;
        temp_odd = temp_odd->next;
        temp_odd->next = NULL;
    }

    //first element in the list is even 
    while (tList != NULL)
    {
        if (tList->next != NULL && tList->next->data % 2)
        {
            temp_odd->next = tList->next;
            tList->next = tList->next->next;
            temp_odd = temp_odd->next;
            temp_odd->next = NULL;
        }
        else
            tList = tList->next;
    }
    return odd_lst.next;
}

node* get_lst(node **linked_lst) {
    int value;
    node  *curr = NULL;
    node  *new_node;
    do
    {
        printf("enter value:");
        scanf_s("%d", &value);
        if (value <0) {
            return NULL;
        }
        new_node = (node*)malloc(sizeof(node));
        new_node->data = value;
        new_node->next = NULL;
        if (*linked_lst == NULL)
        {
            *linked_lst = new_node;
            curr = *linked_lst;
        }
        else
        {
            curr->next = new_node;
            curr = curr->next;
        }
    } while (value >= 0);
    return *linked_lst;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...