c语言数据结构:给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。 输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295 输出:2 -> 1 -> 9,即912 【输入形式】 第一行输入第1个整数(逆序); 第二行输入第2个整数(逆序); 每个数位以空格分隔。 【输出形式】 输出和的逆序。 【样例输入】 7 1 6 e 5 9 2 e 【样例输出】 2 1 9
时间: 2023-06-08 21:06:49 浏览: 123
这是一个典型的链表操作问题。我们可以从链表头开始遍历两个链表,逐位相加,并维护进位。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode dummy = {0, NULL};
ListNode* tail = &dummy;
int carry = 0;
while (l1 || l2 || carry) {
int sum = carry;
if (l1) {
sum += l1->val;
l1 = l1->next;
}
if (l2) {
sum += l2->val;
l2 = l2->next;
}
carry = sum / 10;
tail->next = (ListNode*)malloc(sizeof(ListNode));
tail->next->val = sum % 10;
tail->next->next = NULL;
tail = tail->next;
}
return dummy.next;
}
int main() {
ListNode l1 = {7, NULL};
ListNode l1_node1 = {1, NULL};
ListNode l1_node2 = {6, NULL};
l1.next = &l1_node1;
l1_node1.next = &l1_node2;
ListNode l2 = {5, NULL};
ListNode l2_node1 = {9, NULL};
ListNode l2_node2 = {2, NULL};
l2.next = &l2_node1;
l2_node1.next = &l2_node2;
ListNode* res = addTwoNumbers(&l1, &l2);
while (res) {
printf("%d ", res->val);
res = res->next;
}
printf("\n");
return 0;
}
```
输出为:2 1 9
阅读全文
相关推荐












