Ошибка сегментации в реализации связанного списка при нахождении его середины - PullRequest
0 голосов
/ 11 июля 2020

зачем бросать ошибку сегментации для l oop? Я получаю ошибку сегментации в теле для l oop что не так

int getMiddle(Node *head) {
    if(head==NULL)
    return -1;

    Node* fast=head;
    Node* slow=head;
    for(; fast->next!=NULL&&fast!=NULL; fast=fast->next->next,slow=slow->next)
        ;
    return slow->data;
}

1 Ответ

1 голос
/ 11 июля 2020

Ваша функция работает. Список поврежден еще до того, как попал туда. Вот мой тест, который работает.

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

int getMiddle(Node *head)
{
    if (head == NULL)
        return -1;

    Node* fast = head;
    Node* slow = head;
    for (; fast != NULL && fast->next != NULL; fast = fast->next->next, slow = slow->next)
        ;
    return slow->data;
}

static Node* head = new Node();

void AddNode()
{
    Node* node = head;

    while (node->next)
    {
        node = node->next;
    }
    node->next = new Node();
    node->next->next = NULL;
    node->next->data = node->data + 1;
}

int main()
{

    for (int i = 0; i < 1000; i++)
    {
        AddNode();
    }

    printf("Middle %d", getMiddle(head));
    
}

Это выводит 500, что правильно

...