链表相加程序仅返回单个元素,预期至少3个元素的问题排查
问题排查与修复
你的代码核心问题出在链表构建逻辑和相加函数的剩余节点处理上,以下是具体分析和修复方案:
1. main函数中链表构建的错误
你在创建l1和l2时,只成功生成了第一个节点,后续节点既没有被正确创建,也没有接入链表:
- 以l1为例,for循环里的
if(!t1)仅在i=1时执行一次(创建第二个节点),但这个节点没有被连接到l1的链表尾部;当i=2时,t1已经不为空,不会创建第三个节点。 - 打印逻辑也有问题,你只是打印了t1的val,而不是遍历整个链表,导致你误以为链表已经正确构建。
修正后的链表构建代码
// 构建l1链表 struct ListNode *tail; l1 = (struct ListNode*)malloc(sizeof(struct ListNode)); l1->val = l1i[0]; l1->next = NULL; tail = l1; printf("%d\t", l1->val); for (int i = 1; i < 3; i++) { struct ListNode *new_node = (struct ListNode*)malloc(sizeof(struct ListNode)); new_node->val = l1i[i]; new_node->next = NULL; tail->next = new_node; tail = new_node; printf("%d\t", new_node->val); } printf("\n"); // 构建l2链表同理 l2 = (struct ListNode*)malloc(sizeof(struct ListNode)); l2->val = l2i[0]; l2->next = NULL; tail = l2; printf("%d\t", l2->val); for (int i = 1; i < 3; i++) { struct ListNode *new_node = (struct ListNode*)malloc(sizeof(struct ListNode)); new_node->val = l2i[i]; new_node->next = NULL; tail->next = new_node; tail = new_node; printf("%d\t", new_node->val); } printf("\n");
2. addTwoNumbers函数的逻辑缺陷
- 剩余节点处理错误:当其中一个链表遍历完后,处理剩余节点时,你直接修改t3的val,但t3是结果链表的最后一个节点,随后
t3 = t3->next会让t3变为NULL,后续节点无法添加。正确做法是创建新节点,接到t3尾部。 - 未处理最终进位:如果最后一次相加产生进位(比如999+999=1998),需要额外添加一个存储进位的节点。
修正后的addTwoNumbers函数
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ struct ListNode *t1 = l1, *t2 = l2; struct ListNode *result = NULL, *t3 = NULL; int carry = 0; while (t1 != NULL || t2 != NULL || carry != 0) { int sum = carry; if (t1 != NULL) { sum += t1->val; t1 = t1->next; } if (t2 != NULL) { sum += t2->val; t2 = t2->next; } carry = sum / 10; struct ListNode *temp = (struct ListNode*)malloc(sizeof(struct ListNode)); temp->val = sum % 10; temp->next = NULL; if (result == NULL) { result = temp; t3 = result; } else { t3->next = temp; t3 = temp; } } return result; }
这个修正后的函数用一个循环处理所有情况:包括两个链表都有节点、其中一个链表剩余节点、还有最后的进位,逻辑更简洁健壮。
最终运行结果
修正后,程序会输出:
2 4 3 5 6 4 7 0 8
符合预期(243+564=807,链表是逆序存储,所以结果是7->0->8)。
内容的提问来源于stack exchange,提问作者Premansh Pareek
相关产品推荐
相关产品推荐

