用C语言实现
时间: 2024-01-21 14:10:30 浏览: 22
好的,以下是用 C 语言实现读取两个超大数相加的链表的示例代码。因为 C 语言没有现成的链表类,所以我们需要手动实现链表的相关操作。
```c
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode* next;
};
struct ListNode* createList(int* nums, int size) {
struct ListNode* dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
dummy->next = NULL;
struct ListNode* cur = dummy;
for (int i = 0; i < size; i++) {
cur->next = (struct ListNode*)malloc(sizeof(struct ListNode));
cur->next->val = nums[i];
cur->next->next = NULL;
cur = cur->next;
}
return dummy->next;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
dummy->next = NULL;
struct ListNode* cur = dummy;
int carry = 0;
while (l1 || l2) {
int val1 = l1 ? l1->val : 0;
int val2 = l2 ? l2->val : 0;
int s = val1 + val2 + carry;
cur->next = (struct ListNode*)malloc(sizeof(struct ListNode));
cur->next->val = s % 10;
cur->next->next = NULL;
carry = s / 10;
cur = cur->next;
if (l1) {
l1 = l1->next;
}
if (l2) {
l2 = l2->next;
}
}
if (carry) {
cur->next = (struct ListNode*)malloc(sizeof(struct ListNode));
cur->next->val = carry;
cur->next->next = NULL;
}
return dummy->next;
}
void printList(struct ListNode* head) {
while (head) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
int main() {
int nums1[] = {9, 9, 9, 9, 9, 9, 9};
int nums2[] = {9, 9, 9, 9};
struct ListNode* l1 = createList(nums1, sizeof(nums1) / sizeof(int));
struct ListNode* l2 = createList(nums2, sizeof(nums2) / sizeof(int));
struct ListNode* result = addTwoNumbers(l1, l2);
printList(result);
return 0;
}
```
这个实现同样可以处理链表中任意长度的数,并且可以处理进位的情况。