2.两数相加
注意事项:
1.两链表长度不等时,要处理较长链表剩余的结点和高位
2.链表对应结点相加时增加前一个结点的进位,并保存下一个结点的进位;除法得进位,模得结果
3.如果最高位计算时还产生进位,则还需要添加一个额外结点。
4.创建新节点时主要*
1 1 /** 2 2 * Definition for singly-linked list. 3 3 * struct ListNode { 4 4 * int val; 5 5 * ListNode *next; 6 6 * ListNode(int x) : val(x), next(NULL) {} 7 7 * }; 8 8 */ 9 9 class Solution { 10 10 public: 11 11 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 12 12 int carry = 0; 13 13 ListNode* result = NULL; //注意* 14 14 ListNode* tmp = NULL; 15 15 while(l1 != NULL||l2 != NULL||carry != 0){ 16 16 int sum = (l1 == NULL ? 0:l1->val) + (l2 == NULL ? 0:l2->val) + carry; //注意判断列表是否为空 17 17 carry = sum / 10; 18 18 ListNode* node = new ListNode(sum % 10); //创建新节点 19 19 if(tmp == NULL){ //判断是否为第一个结点 20 20 tmp = node; 21 21 result = tmp; 22 22 }else{ 23 23 tmp->next = node; 24 24 tmp = tmp->next; 25 25 } 26 26 l1 = l1 == NULL ? NULL : l1->next; //注意判断是否到达链表结尾 27 27 l2 = l2 == NULL ? NULL : l2->next; 28 28 } 29 29 return result; 30 30 } 31 31 };