0

整数を単一リンクリストとして表す関数をCで記述すると、負の整数のマイナス記号は表示されません。私は何が間違っているのですか?アルゴリズムの改善点と、それを解決するための最速の方法を提案できますか?ここでCnoob。

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

typedef struct {
    char info;
    struct Node *link;
} Node;

Node* add_front (Node* head, char info)
{
    Node* t = malloc(sizeof(struct Node));
    t->info = info;
    t->link = head;
    return t;
}

void display (Node* head)
{
    while(head != NULL) {
        printf("%d   ", head->info);
        head = head->link;
    }
}

Node* number_list (int n)
{
    int digit, minus = (n < 0 ? 1 : 0);
    Node* list = NULL;

    if (minus) n *= -1;

    do {
        digit = n % 10;
        list = add_front(list, (char)digit);
        n = n / 10;
    } while(n > 0);

    if (minus) add_front(list, '-');

    return list;
}

int main()
{
        int n = -1024;
        Node* l = number_list(n);
        display(l);
        return 0;
}
4

1 に答える 1

2
if(minus) {
   add_front(list, '-');
}

add_front はリストの新しい先頭を返すため、次のことを行う必要があります

if(minus) {
  list =  add_front(list, '-');
}

次の問題は表示機能にあります。

 printf("%d   ", head->info);

char を数値として出力します。char を数値として出力'-'すると、マイナスは出力されませんが、a の値である-43 が ascii で出力されます。

表示機能を変更するか

while(head != NULL) {
   if(head->info == '-') {
       putchar('-'); 
   }else {
     printf("%d   ", head->info);
   }
    head = head->link;
}

または、実際の文字の数字をリストに保存し、要素を で出力しprintf("%c", head->info);ます。つまり、たとえば7リストに数値を保存する代わりに、文字の数字を保存し'7' ます。

list = add_front(list, (char)('0'+digit));
于 2012-09-02T10:07:48.320 に答える