leetcode第二题

发布于:2025-04-15 ⋅ 阅读:(33) ⋅ 点赞:(0)

 

功能函数

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;
}

运行结果