Функция my_find_node, которая возвращает адрес первого узла - PullRequest
1 голос
/ 25 марта 2020

Мне нужна помощь для написания функции в соответствии с этими инструкциями:

Напишите функцию с именем my_find_node, которая возвращает адрес вхождения первого узла, который содержит данные, равные справочным данным. Если такой узел не найден, должен быть возвращен NULL.

Он должен быть прототипирован следующим образом:

connected_list_t * my_find_node (connected_list_t * list, const int data_ref);

На данный момент мой код по какой-то причине не компилируется.

Я сделал заголовочный файл с именем my_list.h, который содержит:

    #ifndef __MYLIST__H__
    #define __MYLIST__H__

    typedef struct linked_list_t
    {
    int x;
    struct linked_list_t *next;
    }linked_list_t;

linked_list_t *my_find_node(linked_list_t *list, const int data_ref);

#endif

И вот объявление моей функции:

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


linked_list_t *my_find_node(linked_list_t *list, const int data_ref)
    {
        linked_list_t *current = list;

        int count = 0;

        if(current == NULL)
            return (NULL);

    while (list != NULL)
    {
        if (count == data_ref)
            return element;

        count++;
        current = current->next;
    }
    return (NULL);
}

Если кто-то может помочь я бы заставил это работать или дать мне любую подсказку, было бы здорово! Спасибо

1 Ответ

0 голосов
/ 25 марта 2020

Ваш код пытается соответствовать N-му элементу в списке, а не соответствует содержимому / значению узла.

Кроме того, element не было определено. И вы делали while (list != NULL), но делали current = current->next, так что, по сути, у вас было while (1) среди других проблем.

Это на самом деле немного проще, основываясь на определении проблемы (то есть содержит данные, равные справочным данным ). Вот слегка переработанная версия:

linked_list_t *
my_find_node(linked_list_t *list,const int data_ref)
{
    linked_list_t *current;

    for (current = list;  current != NULL;  current = current->next) {
        if (current->x == data_ref)
            break;
    }

    return current;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...