1 题目
You are giventwo linked lists representing two non-negative numbers. The digits are storedin reverse order
and each of their nodes contain a single digit. Add the twonumbers and return it as a linked list.
Input: (2 -> 4 -> 3)+ (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
2 分析
该题目属于链表的相加,需要注意的有:
(1) 考虑两个链表的长度,尤其是链表为空时也能处理。
(2) 每个结点只表示一位数字。
(3) 当链表末尾结点相加后若有进位,则需要申请新的结点存储信息。

3 核心代码:

int listLength(ListNode* head)  //递归得到链表的长度
{  
    return head ? 1 + listLength(head ->next) : 0;  
}  
   
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2){  //把两个链表相加(前面的参数为长链表)
    if (listLength(l1) < listLength(l2)){   
        return addTwoNumbers(l2, l1);  
    }  
    ListNode *head1 = l1, *head2 = l2;  
    int inc = 0;  
    bool isEnd = false;  
    while (head2){ 
        int val = head1 -> val + head2-> val + inc;  
        head1 -> val = val % 10;  
        inc = val / 10;  
        if (head1 -> next){  
            head1 = head1 -> next;  
        }else{  
            isEnd = true;  
        }  
        head2 = head2 -> next;  
    }  
    while (inc){ //当短链表计算完之后
        int val = isEnd ? inc : head1 ->val + inc;  
        if (isEnd){   
            head1 -> next = new ListNode(val % 10);  
        }else{  
            head1 -> val = val % 10;  
        }  
        inc = val / 10;  
        if (head1 -> next){  
            head1 = head1 -> next;  
        }else{   
            isEnd = true;  
        }  
    }  
    return l1;  
}
View Code

相关文章:

  • 2022-12-23
  • 2021-06-22
  • 2022-03-01
  • 2022-12-23
  • 2021-07-23
  • 2021-12-15
猜你喜欢
  • 2022-12-23
  • 2021-09-27
  • 2021-05-29
  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案