2.两数相加
程序员文章站
2022-04-17 15:55:07
...
- 哑节点可以不考虑头节点情况
- 最后的进位要单独写入,可以放到while里一起判断
- 新链表的建立过程:
ListNode* ans = new ListNode(0); - 可以引申到大数相加问题。
/**
* 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;
}
};
下一篇: 11. 盛最多水的容器