问题:两数相加
解题思路
模拟加法过程,两链表对应位相加,记录进位,如果某链表位数不足则用0替代其值。
C++代码
/**
* 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 *l3 = new ListNode(0);//增加一个头节点
ListNode *cur = l3;
int carry = 0;//记录进位
while(l1 || l2){//如果还有一个链表有节点
int num1 = l1 ? l1->val : 0; //取l1链表中的节点值
int num2 = l2 ? l2->val : 0; //取l2链表中的节点值
int num = num1 + num2 + carry; //相加
cur->next = new ListNode(num % 10);
carry = num / 10;//获得进位
cur = cur->next;
if(l1) l1 = l1->next;
if(l2) l2 = l2->next;
}
//如果还有进位
if(carry) cur->next = new ListNode(carry);
return l3->next; //返回新链表
}
};