考察的知识点:与链表有关的题基本都是插入,删除,交换顺序等,解决这些问题通常将链表的指针进行修改。

问题分析:遍历两个链表,将两个链表相加,注意链表的长短不一样,还有就是最后一位需不需要进位。

本题解析所用的编程语言:c++

ListNode* addEnergyValues(ListNode* l1, ListNode* l2)
{
    ListNode* head = new ListNode(-1);
    ListNode* cur = head;
    int m = 0; //是否进位
    //有一个链表为空则退出
    while (l1 && l2)
    {
        int n = l1->val + l2->val + m;
        m = 0;
        if (n > 9)
            m = 1;
        cur->next = new ListNode(n%10);
        cur = cur->next;
        l1 = l1->next;
        l2 = l2->next;
    }
    if (l1)
        l2 = l1;
    //if处理后,l2一定不为空
    while (l2)
    {
        int n = l2->val + m;
        m = 0;
        if (n > 9)
            m = 1;
        cur->next = new ListNode(n % 10);
        cur = cur->next;
        l2 = l2->next;
    }
    //处理最后进位的数
    if (m == 1)
        cur->next = new ListNode(m);
    return head->next;
}