круговой двусвязный список в C - PullRequest
0 голосов
/ 10 марта 2019

Эта цель кодов на данный момент состоит в том, чтобы создать круговой двусвязный список, в котором будут отображаться номера заключенных, к которым я позже применим задачу Иосифа в функции удаления

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

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

struct Node* first, *last; // global variables first and last

struct Node* GetNewNode(int x)
{
    struct Node* newNode = malloc(sizeof(struct Node));
    newNode->data = x;
    newNode->next = newNode->prev = newNode;
    first = newNode;
    return newNode;
};

Я считаю, что что-то не так в моемфункция печати или вставки

void insertEnd(int x)
{
    struct Node* newNode = GetNewNode(x);
    struct Node* temp = GetNewNode(x);

    if (first == NULL)
    {
        first = newNode;
        return;
    }


    last = first->prev;
    temp->data = x;
    temp->next = first;
    first->prev = temp;
    temp->prev = last;
    last->next = temp;

}

Эта функция не печатает пять узлов. Я ожидаю, что она напечатает в цикле for в главном

void printList()
{
    struct Node* temp = first;

    while(temp->next != first)
    {

Строка ниже никогда не печатает.

        printf("prisoner %d| ", temp->data);
        temp = temp->next;
    }
    printf("%d", temp->data);
}



int main()
{
    int n,k;

    printf("How many prisoners are there: ");
    scanf("%d", &n);

этот цикл for пытается присвоить номера заключенных каждому узлу, добавленному в список

    for(int i = 1; i <= n; i++)
    {
        insertEnd(i);
    }

    printList();

    return 0;
}
...