在C中编写一个表示整数作为单链表的函数,负整数的减号不显示。我究竟做错了什么?您能否建议算法的任何改进,以及解决它的最快方法? C noob在这里。
#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;
}
答案 0 :(得分:2)
if(minus) {
add_front(list, '-');
}
由于add_front返回列表的新头部,您必须执行
if(minus) {
list = add_front(list, '-');
}
下一个问题出在你的显示功能中,
printf("%d ", head->info);
将char作为数字打印,打印char '-'
作为数字不会打印减号,但是a -
的值为acii中的43。
更改显示功能
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));