gpt4 book ai didi

c - 将整数表示为链表

转载 作者:行者123 更新时间:2023-11-30 14:24:06 25 4
gpt4 key购买 nike

用 C 语言编写一个将整数表示为单链表的函数,负整数的减号不会显示。我究竟做错了什么?您能建议算法的任何改进以及解决该问题的最快方法吗?这里是 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;
}

最佳答案

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

由于 add_front 返回列表的新头,因此您必须这样做

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

下一个问题是你的显示功能,

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

将字符打印为数字,将字符 '-' 打印为数字不会打印负数,而是打印 - 的值,ascii 中的 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));

关于c - 将整数表示为链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12235013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com