栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2. 两数相加 链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2. 两数相加 链表

力扣题目:2. 两数相加

解题思路

执行用时:2 ms, 在所有 Java 提交中击败了96.47%的用户
内存消耗:38 MB, 在所有 Java 提交中击败了99.43%的用户

思路:
既然可以顺序求解,那么就按照顺序进行加法的运算
首先一个需要注意的:进位,使用oj来表示
而循环计算的条件是:l1和l2有一个不为null,(l1!=null || l2 != null) 也即是需要往下继续生成节点
循环内部的判断是:
 通过一个变量v来联系l1和l2
  1.看l1是否为null,如果是,那么v就为l2的值,此时l1已经为null,l2=l2.next
  2.看l2是否为null,如果是,那么v就为l1的值,此时l2已经为null,l1=l1.next
  3.因为while中确保了l1和l2至少有一个不为null,所以,由1,2判断后,仍走到3,也即是l1和l2都不为null,
   那么v就为**(l1+l2)**的值,此时 l1=l1.next,l2=l2.next

代码
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    	ListNode head  = new ListNode(), l = new ListNode();
    	boolean flag = true;
    	boolean markup = true;
    	int oj = 0; //表示进位
    	int v = 0;
    	while(l1 != null || l2 != null) {
    		if(l1 == null) {
    			v = l2.val;
    			l2 = l2.next;
    		}else if( l2 == null) {
    			v = l1.val;
    			l1 = l1.next;
    		}else {
    			v = l1.val + l2.val;
    			l1 = l1.next;
    			l2 = l2.next;
    		}
//			看两者是否同时位空,只要一个不为空,那么就为true,直到两个都为空
			markup = (l1==null && l2==null) ? false : true;
			
    		l.val = (v+oj) >= 10 ? (v+oj) % 10 : (v+oj);
    		if(flag) {head = l; flag = false;}
    		oj = (v+oj) / 10;
    		
    		if(markup)
    			l = ( l.next = new ListNode() );
    		else {// 在l1和l2都为null时,如果oj不为0,那么就将oj放进节点中
    				l = oj > 0 ? ( l.next = new ListNode(oj) ) : null;
    		}
    	}
    	
    	return head;

    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号