Как исправить дважды связанные узлы, не правильно связывая? - PullRequest
0 голосов
/ 24 апреля 2019

Мой двусвязный список - это колода карт.Я правильно их инициализировал, но они не соединяются.Левый заголовок указывает на NULL в обоих направлениях, и в то время как предыдущий указатель моего правого заголовка указывает на предыдущую карту, предыдущий указатель этой карты указывает на NULL.Как я могу их подключить?Я уверен, что это не сложное решение, но я просто не могу понять его по какой-то причине.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
#include <stdlib.h>
#define RAND_MAX 51

typedef struct card_s {
char suit;
int face;
struct card_s *next, *previous;
}card;

void addcard(card *p, card **hl, card **hr, int i, char c) {
card *temp;
temp = (card *)malloc(sizeof(card)); 
temp->face = i;
temp->suit = c;
if (*hl == NULL) {
    temp->previous = NULL;
    temp->next = NULL;
    *hl = temp;
    *hr = temp;
}
else if (p == NULL) {
    p = calloc(1, sizeof(card));
    temp->previous = p;
    temp->next = NULL;
    p->next = temp;
    *hr = temp;
}
else {
    temp->next = p->next;
    temp->previous = p;
    p->next = temp;
    temp->next->previous = temp;
}
}

void delectecard(card *p, card **hl, card **hr) {
if (p == *hl) {
    *hl = p->next;
}
else {
    p->previous->next = p->next;
}
if (p == *hr) {
    *hr = p->previous;
}
else {
    p->next->previous = p->previous;
}
free(p);
}
void createdeck(card *p, card **hl, card **hr) {
int i = 1;
int j;
while (i <= 13) {
    j = 1;
    while (j <= 4) {
        if (j == 1) {
            addcard(p, hl, hr, i, 'S');
        }
        if (j == 2) {
            addcard(p, hl, hr, i, 'H');
        }
        if (j == 3) {
            addcard(p, hl, hr, i, 'D');
        }
        if (j == 4) {
            addcard(p, hl, hr, i, 'C');
        }j++;
    }
    i++;
}
}
void printdeck(card *currentNode) {
while (currentNode != NULL) {
    printf("Face: %d, Suit: %c\n", currentNode->face, currentNode- 
 >suit);
    currentNode = currentNode->next;
}
}
 int main(void) {
card *headl = NULL, *headr = NULL;
createdeck(headr, &headl, &headr);
printdeck(headl);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...