本文主要是介绍【打卡第184道】【链表】【leetCode高频】:2. 两数相加,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、题目描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
2、算法分析
本题是求两个链表的结点的和,而且两个数是倒叙排列在链表中的。
本题求两个数的和步骤如下:
①创建一个新的带头结点的空链表存储结果集。
②遍历链表
③求和,求和中最重要的就是当前位和进位的处理。
当前位:sum % 10,
进位:sum / 10
④创建新的结点,将新结点连接到链表后
⑤如果进位最后是1的话,将1连接到结果链表中
返回res.next;
3、代码实现
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode res = new ListNode(0);ListNode current = res;// 余数int carry = 0;while(l1 != null || l2 != null){int a = 0;int b = 0;if(l1 != null){a = l1.val;}if(l2 != null){b = l2.val;}int sum = a + b + carry;carry = sum / 10;ListNode node = new ListNode(sum % 10);current.next = node;current = current.next;if(l1 != null){l1 = l1.next;}if(l2 != null){l2 = l2.next;}}if(carry == 1){current.next = new ListNode(carry);}return res.next;}
}
这篇关于【打卡第184道】【链表】【leetCode高频】:2. 两数相加的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!