欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2.两数相加

程序员文章站 2022-04-17 15:55:07
...

2.两数相加

  1. 哑节点可以不考虑头节点情况
  2. 最后的进位要单独写入,可以放到while里一起判断
  3. 新链表的建立过程:
    ListNode* ans = new ListNode(0);
  4. 可以引申到大数相加问题。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
 
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* ans = new ListNode(0);    //建立一个哑节点
        ListNode* res = ans;
        
        //将数据建链放入
        int cten = 0;
        int cone = 0;
        while(l1!= NULL ||l2 != NULL || cten != 0)
        {
            int a = 0;
            int b = 0;
            if(l1!= NULL)
            {
                a = l1->val;
                l1 = l1->next;
            }
            if(l2!= NULL)
            {
                b = l2->val;
                l2 = l2->next;
            }
            cone = (a+b+cten)%10;	//个位数
            cten = (a+b+cten)/10;	//十位数
            
		    //将节点插入
            ListNode* node = new ListNode(cone);
            res->next = node;
            res = res->next;
        }
        return ans->next;
    }
};