
功能函数
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
ListNode *dummy = (ListNode *)malloc(sizeof(ListNode));
ListNode *cur = dummy;
int carry = 0; //carry是进位值
while(l1 || l2 || carry)
{
int a = l1 ? l1->val : 0; //l1为空时,a为0 //l1不为空时,a为l1->val
int b = l2 ? l2->val : 0;
int sum = a + b + carry;
carry = sum / 10; //carry是进位值,初始为0。
cur->next = (ListNode *)malloc(sizeof(ListNode)); //从虚拟头节点创建一个节点
cur = cur->next;
cur->val = sum % 10;
cur->next = NULL;
if(l1) l1 = l1->next;
if(l2) l2 = l2->next;
}
ListNode *head = dummy->next; //返回结果链表(跳过虚拟头节点)
free(dummy); // 释放虚拟头节点
return head;
}
测试代码
int main() {
// 示例输入:创建两个链表 l1 和 l2
ListNode* l1 = (ListNode*)malloc(sizeof(ListNode)); //动态申请一个 ListNode 结构体大小的内存块,并把这个地址赋值给指针 l1。
l1->val = 2; l1->next = (ListNode*)malloc(sizeof(ListNode));
l1->next->val = 4; l1->next->next = (ListNode*)malloc(sizeof(ListNode));
l1->next->next->val = 3; l1->next->next->next = NULL;
ListNode* l2 = (ListNode*)malloc(sizeof(ListNode));
l2->val = 5; l2->next = (ListNode*)malloc(sizeof(ListNode));
l2->next->val = 6; l2->next->next = (ListNode*)malloc(sizeof(ListNode));
l2->next->next->val = 4; l2->next->next->next = NULL;
// 调用函数并输出结果
ListNode* result = addTwoNumbers(l1, l2);
while (result) {
printf("%d ", result->val);
result = result->next;
}
printf("\n");
return 0;
}
运行结果
