0
点赞
收藏
分享

微信扫一扫

2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可

程序员伟杰 2022-04-24 阅读 73
数据结构
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode* head;//定义头节点
    struct ListNode* tail;//定义为节点
    int data1, data2;//data1用来存放单链表1中的数据,data2用来存放单链表2中的数据
    int temp;//进位标志
    head = NULL;
    tail = NULL;
    data1=data2 = temp = 0;
    //对单链表l1和L2进行遍历从而读取单链表L2和l1中的元素
    while (l1 != NULL || l2 != NULL) 
    {
        //新建立一个单链表
        if (head == NULL) //若新建立的链表为空时
        {
            head = (struct ListNode*)malloc(sizeof(struct ListNode));//对新建的链表分配空间
            head->val = 0;
            head->next = NULL;
            tail = head;//由于链表中没有元素,所以头结点和尾结点所指的地方是一个地方
        }
        else //若新建立的链表为非空的时间
        {
            tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));//对链表next的区域分配空间
            tail = tail->next;
        }
        if (l1 == NULL) //如果单链表l1中没有元素
        {
            data1 = 0;
        }
        else//如果单链表l1中还有元素
        {
            data1 = l1->val;
            l1 = l1->next;
        }
        if (l2 == NULL) 
        {
            data2 = 0;
        }
        else 
        {
            data2 = l2->val;
            l2 = l2->next;
        }
        tail->val = (data1+data2 + temp) % 10;
        temp = (data1+data2 + temp) / 10;
        tail->next = NULL;
    }
    if (temp == 1) {     //如果还有进位,最高位应该为1
        tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));
        tail = tail->next;
        tail->val = 1;
        tail->next = NULL;
    }
    return head;
}

以上是我使用c语言完成的这道题,在新创建的链表中,用到了数据结构中的单链表的尾插法进行完成的。

通过这道题,我们有一次复习了单链表的尾插法,以及单链表的遍历。

举报

相关推荐

两个整数相加的3种方法

两个链表的第一个公共结点

0 条评论