Leetcode002--单链表两数相加
来源:互联网 发布:php python 比较 编辑:程序博客网 时间:2024/05/24 02:55
一、原题
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
二、中文
有两个单链表,代表两个非负数,每一个节点代表一个数位,数字是反向存储的,即第一个结点表示最低位,最后一个结点表示最高位。求两个数的相加和,并且以链表形式返回。
三、举例
输入链表 1->2->3->4 和链表 1->8->3->4 最后得到链表 2->0->7->8
四、思路
(1)构建两链表从最左边开始相加,其结果存入另外一个链表
(2)当相加之和小于10时,不产生进位,当大于等于10的时候,产生进位
(3)这里要注意一种情况,就是当最后的一对结点相加之和大于等于10的时候也要产生进位,这是需要创建一个新的结点
五、程序
package LeetCode;public class Leetcode002 {public static void main(String args[]){//测试程序,链表1:1->8->3->6,链表2:1->2->3->4ListNode node1 = new ListNode();node1.value = 1; node1.next = new ListNode(); node1.next.value = 8; node1.next.next = new ListNode(); node1.next.next.value = 3; node1.next.next.next = new ListNode(); node1.next.next.next.value = 6; ListNode node2 = new ListNode();node2.value = 1; node2.next = new ListNode(); node2.next.value = 2; node2.next.next = new ListNode(); node2.next.next.value = 3; node2.next.next.next = new ListNode(); node2.next.next.next.value = 4; ListNode node3 = new ListNode();node3 = addTwoLists(node1, node2);//打印我们返回的链表结果while(node3 != null){System.out.print(node3);node3 = node3.next;}}//创建一个链表的类public static class ListNode{int value;ListNode next;public ListNode(){}public String toString(){return value+"->";}}public static ListNode addTwoLists(ListNode head1, ListNode head2){if(head1 == null || head2 == null){return null;}ListNode head3 = new ListNode();// 保存头结点,最后返回的时候用ListNode storeNode = head3;int flag = 0;int sum = 0;while(head1 != null && head2 != null){sum = head1.value + head2.value + flag;flag = 0;if(sum < 10){head3.value = sum;}else if(sum >= 10){flag = 1;head3.value = sum - 10;}head1 = head1.next;head2 = head2.next;//创建一个新的结点,前提是不是到达两个链表最后的元素时if(head1 != null && head2 != null){ListNode newnode = new ListNode();head3.next = newnode;head3 = head3.next;}}// 如果有一个为空的情况下执行if(head1 == null){head3.next = head2;}if(head2 == null){head3.next = head1;}// 也就是说最后一位相加还有进位,要创建一个新的结点if(flag == 1){ListNode lastnode = new ListNode();lastnode.value = 1;head3.next = lastnode;}return storeNode;}}
-------------output---------------
2->0->7->0->1->
1 0
- Leetcode002--单链表两数相加
- LeetCode002
- leetcode002:3sum closest
- leetcode002:Add Two Numbers
- leetcode002 Add Two Numbers
- Add Two Numbers - leetcode002
- leetcode002 Add Two Numbers
- Leetcode002-Add Two Numbers
- LeetCode002 Add Two Numbers
- Leetcode002 Add Two Numbers
- Leetcode003--单链表两数相加
- 相加
- leetcode002——add two numbers
- 大数相加
- 分数相加-
- 大数相加
- 大数相加
- 大数相加
- 0001-算法笔记分治法实现棋盘覆盖问题
- 给 Android 开发者的 RxJava 详解
- 滴滴2017校园招聘编程题——阶乘末尾0的个数
- Javascript- 声明变量时用"var"与不用"var"的区别
- STM32之定时器
- Leetcode002--单链表两数相加
- 一起来学activeMQ 3.JMS 的可靠性机制
- Swift - UIColor 16进制转换 及 获取RGB随机颜色
- Cocos2dx 链接HTTP网络服务器
- windows路由表
- 3D球员
- 队列实现生产者消费者模型
- 堆栈窗口 QStackedWidget 测试
- HDU 5900 区间dp