• 首页

  • 归档

  • 标签

  • 分类

  • 友链
M S B l o g
M S B l o g

ms

获取中...

04
22
java
总结
问题

【力扣】链表求和

发表于 2021-04-22 • java 总结 数据结构 力扣 • 被 1,104 人看爆

题目:

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

 

示例:

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?

示例:

输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-lists-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:

因为头节点到尾节点依次是从个位、十位、百位。。。 所以我们只需要让两个链表直接挨个遍历相加,如个位相加的得数取模10,将得到的数存到新链表,这个数就是两个链表数相加后的个位数,以此类推个位,十位,,,皆是如此,最终得到的链表就是两个链表相加后的结果。
原理就像小学的加法算数,两数相加,逢十进一,余下的数当前进位即可;

/**
 * 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) {
	//排除一些极端情况
        if(l1 == null){
            return l2;
        }
        if(l2 == null){
            return l1;
        }
	//表示进位
        int carray = 0;
	ListNode head = new ListNode(0);
	ListNode pre = head;
	while(l1 != null || l2 != null || carray != 0) {
		//两链表求和的值,初始化,上一个相加的进位
		int sum = carray;
		if(l1 != null) {
			sum += l1.val;
			//l1节点向后移动
			l1 = l1.next;
		}
		if(l2 != null) {
			sum += l2.val;
			//l2节点向后移动
			l2 = l2.next;
		}
		//构建一个新节点,把将pre的指向新节点
		pre.next = new ListNode(sum%10);
		//pre的节点向后移动
		pre = pre.next;
		//两链表l1,l2数相加后的进位数
		carray = sum/10;
			
	}
	return head.next;
    }
}

分享到:
【力扣】回文链表
Java中的相除(/)和取余(%)
  • 文章目录
  • 站点概览
ms

MSms

⚓️HelloWorld⚓️

QQ Email RSS
看爆 Top5
  • MyBatis-Plus分页查询 5,937次看爆
  • @Autowired与@Resource的区别 4,755次看爆
  • feign远程调用及异步调用丢失请求头问题 4,527次看爆
  • spring cloud中OpenFeign整合Sentinel启动报错 4,425次看爆
  • Certbot查看证书过期时间,手动续期以及自动续期 3,303次看爆

Copyright © 2025 ms · 湘ICP备20015239号

Proudly published with Halo · Theme by fyang · 站点地图