Эта цель кодов на данный момент состоит в том, чтобы создать круговой двусвязный список, в котором будут отображаться номера заключенных, к которым я позже применим задачу Иосифа в функции удаления
#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;
}