给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
Posted 张小仑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。相关的知识,希望对你有一定的参考价值。
题目描述:
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
思路:
1.定义链表类
2.创建两个数的链表表示对象
3.传入函数实现相加:每一位相加,设置进位,移到下一位,直到待加链表都为空
具体代码:
1 public class ListNode { 2 int val; 3 ListNode next; 4 5 ListNode(int x) { 6 val = x; 7 } 8 9 } 10 11 public class lkk { 12 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 13 ListNode dummyHead = new ListNode(0); 14 ListNode p = l1, q = l2, curr = dummyHead; 15 int carry = 0;// 进位表示 16 while (p != null || q != null) { 17 int x = (p != null) ? p.val : 0; 18 int y = (q != null) ? q.val : 0; 19 int sum = carry + x + y;// 每一次每一位的相加的结果,都是位之和再加进位 20 carry = sum / 10;// 储存进位 21 curr.next = new ListNode(sum % 10);// 当前位相加之后的最终表示 22 curr = curr.next; 23 if (p != null) 24 p = p.next; 25 if (q != null) 26 q = q.next; 27 } 28 if (carry > 0) { 29 curr.next = new ListNode(carry); 30 }//相加之后若进位有值则和再添加一位 31 return dummyHead.next;//因为curr是初始为,val为0,数字表示实际从它的下一个节点开始 32 } 33 34 }
总结:
1.对链表的考察
2.对整数相加的算法设计的考察:每一位依次相加,有进位
以上是关于给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。的主要内容,如果未能解决你的问题,请参考以下文章
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。