【LeetCode练习】[中等]2. 两数相加

【LeetCode练习】[中等]2. 两数相加

2. 两数相加

题目来源link
算法思想:链表;

PS:java没有指针;在链表中,遍历到最后的ListNode的索引会消失(如n1,n2),再进行实例化后不会再指向链表微端!需要进行特殊标记,使用p.next这样的方式机进行实例化(新链表结点的生成)

java代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    	int nums1 = 0;
    	int nums2 = 0;
    	ListNode res = new ListNode(0);
     	ListNode n1 = l1;//统计l1的长度
    	ListNode n2 = l2;//统计l2的长度
    	while (n1 != null) {
			nums1++;
			n1 = n1.next;
		}
    	while (n2 != null) {
			nums2++;
			n2 = n2.next;
		}
    	if(nums1 > nums2) {//保证l2长度更长
    		ListNode temp = l1;
    		l1 = l2;
    		l2 = temp;
    	}
    	res.next = l2;//运用res.next指向最后答案,方便输出;
    	int index = 0;//进位标志
        while (l1 != null) {//按照l1长度的进行计算
        	int temp = (l1.val + l2.val + index);//l1+l2数值计算
        	l2.val = temp % 10 ;
			index = temp / 10;
			l1 = l1.next;
			l2 = l2.next;
		}
        while (l2 != null && index == 1) {//计算l2剩余长度结点的计算
        	int temp = index + l2.val;
        	l2.val = temp % 10;
			index = temp / 10;
			l2 = l2.next;
			
		}
        if(index == 1) {//判断最后是否有进位
        	ListNode p = res.next;//p指针用来找到最后一个链表结点
            while(p.next != null) {
            	p = p.next;
            }//找到链表最后一个元素
            p.next = new ListNode(1);//添加进位的数值1
        }
        return res.next;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值