
功能函数
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->valint 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 和 l2ListNode* 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;
}
运行结果
