0

用 C 语言编写一个将整数表示为单链表的函数,负整数的减号不显示。我究竟做错了什么?你能建议算法的任何改进,以及解决它的最快方法吗?这里是菜鸟。

#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 in 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 回答