以下是修改后的代码,修复了一些错误和逻辑问题:
#include <stdio.h>
#include <stdlib.h>
struct nums
{
int num;
struct nums *next;
};
struct nums* createNode(int num)
{
struct nums* node = malloc(sizeof(struct nums));
node->num = num;
node->next = NULL;
return node;
}
void append(struct nums** head, int num) {
struct nums* node = createNode(num);
if (*head == NULL)
{
*head = node;
}
else
{
struct nums* cur = *head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = node;
}
}
struct nums* add(struct nums* l1, struct nums* l2)
{
struct nums newnum; // 创建一个头节点
struct nums* curr = &newnum; // 当前节点指针
int index = 0;
while (l1 != NULL || l2 != NULL || index != 0)
{
int sum = index;
if (l1 != NULL)
{
sum += l1->num;
l1 = l1->next;
}
if (l2 != NULL)
{
sum += l2->num;
l2 = l2->next;
}
index = sum / 10;
curr->next= createNode(sum % 10);
curr= curr -> next;
}
return newnum.next;
}
void print(struct nums* head)
{
struct nums* temp= head;
while(temp!=NULL)
{
printf("%d ", temp->num);
temp= temp->next;
}
printf("\n");
}
int main()
{
struct nums *list1 = NULL;
struct nums *list2 = NULL;
int l1 = 0;
int l2 = 0;
printf("请输入链表l1表示的数字:");
scanf("%d", &l1);
while (l1 > 0)
{
append(&list1, l1 % 10);
l1 /= 10;
}
printf("请输入链表l2表示的数字:");
scanf("%d", &l2);
while (l2 > 0)
{
append(&list2, l2 % 10);
l2 /= 10;
}
struct nums* sum = add(list1, list2);
printf("表示和的链表为:\n");
print(sum);
struct nums* temp;
while (sum != NULL)
{
temp= sum->next;
free(sum);
sum= temp;
}
return 0;
}
修复了以下问题:
- 创建节点时使用了错误的结构体指针类型
add
函数中创建新节点时,将其添加到结果链表中main
函数中读取输入数字并构建链表- 添加了释放内存的部分代码
内容由零声教学AI助手提供,问题来源于学员提问