赞
踩
两数相加 力扣
1.通过
- class Solution {
- public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
- /** 定义一个临时变量表示进位
- * 从第一位开始相加,直至一条链为空
- * 若>10,则计算相应的进位
- */
- int temp = 0;
- int num = 0;
- ListNode firstNode = new ListNode(-1);
- ListNode p = firstNode;
- while(l1 != null && l2 != null){
- if(temp == 1){
- num = l1.val + l2.val + 1;
- }else{
- num = l1.val + l2.val;
- }
- temp = num / 10;
- int res = num % 10;
- p.next = new ListNode(res);
- p = p.next;
- l1 = l1.next;
- l2 = l2.next;
- }
- if(l1 != null){
- while(l1 != null){
- if(temp == 1){
- num = l1.val + 1;
- }else{
- num = l1.val ;
- }
- temp = num / 10;
- int res = num % 10;
- p.next = new ListNode(res);
- p = p.next;
- l1 = l1.next;
- }
- }
- if(l2 != null){
- while(l2 != null){
- if(temp == 1){
- num = l2.val + 1;
- }else{
- num = l2.val ;
- }
- temp = num / 10;
- int res = num % 10;
- p.next = new ListNode(res);
- p = p.next;
- l2 = l2.next;
- }
- }
- if(temp != 0){
- p.next = new ListNode(1);
- p = p.next;
- }
- return firstNode.next;
- }
- }
需要注意的是,要在不同情况下考虑进位带来的影响
1.两数的位数都不是0
2.有一个数最高位已结束
3.两个数最高位都已结束
小技巧:对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点head。使用预先指针的目的在于链表初始化时无可用节点值,而且链表构造过程需要指针移动,进而会导致头指针丢失,无法返回结果。
- ListNode firstNode = new ListNode(-1);
- ListNode p = firstNode;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。