如何按套装和价值创建有序链接卡片列表

时间:2014-10-16 23:09:03

标签: c struct linked-list nodes

我有一个作业,用于制作按套装和价值排序的卡片节点的链接列表。卡片结构:

   struct card {
        int value;
        char suit;
    }
    struct CNode {
        card * card1;
        CNode * CNode->next;
    }

或类似的东西;基本上有一个卡片stsruct和一个链接列表(不确定这是否正是我所拥有的,但我拥有的是100%正确所以不要评论我的结构)。现在为代码创建列表:

    void addCard(Player * player1, Card * card1) {
         CNode * ins_node = malloc(sizeof(CNode));
         ins_node->card = card1;
         ins_node->next = NULL;
         if (player1->hand == NULL);
                  player1->hand = ins_node;
                  return;
         else {
             CNode * temp = player1->hand;
             while (temp->next != NULL) {
                if (strcmp(temp->card->suit, ins_node->card->suit) == 0){
                         //if (ins_node->card->value > temp->card->value) {
                              ins_node->next = temp->next;
                              temp->next = ins_node;
                               return;
                         // }
                }
            }
            temp = temp->next;
    }
    temp->next = ins_node;
}

让我们假装所有格式都很好。现在,我无法弄清楚为什么这不能满足我的需要。我已经工作了几个小时,无法取得任何进展。如果您可以帮助/修改现有代码,我真的很感激。目前,这将输出由西装订购的卡片,但价值将一切都搞砸了。如果你看到任何简单的修复,请告诉我。

2 个答案:

答案 0 :(得分:0)

在我看来,你遇到了无限循环:

             while (temp != NULL) {
              if (strcmp(temp->card->suit, ins_node->card->suit) == 0){
                         if (ins_node->card->value > temp->card->value) {
                           CNode * prev = temp;
                           temp = temp->next;
                           prev->next = ins_node;
                           ins_node->next = temp;
                           return;
                         }
              }
              temp = temp->next;   //move on no matter match or not. 
            }  

答案 1 :(得分:0)

根据

suit

char仅为char,您无法使用

比较 if (strcmp(temp->card->suit, ins_node->card->suit) == 0){
#include <string.h>

如果您没有struct card,则此错误只会被忽视。或者您没有显示FindAncestor的真实定义。