Leetcode002--单链表两数相加
2016-09-19 12:30
423 查看
一、原题
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 asa 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->4 ListNode 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->
相关文章推荐
- Leetcode 第二题,两数链表相加
- LeetCode 02. 两数相加(链表) 03.最大不重复的字符串
- Leetcode-java实现-002(链表相加)
- 链表:链表两数相加( LeetCode 2. Add Two Numbers(两数相加))
- [Leetcode]Add Two Numbers链表数相加
- LeetCode刷题记: 两数相加
- Add Two Numbers Leetcode 链表相加
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- LeetCode2——Add Two Numbers(两个链表中的数字相加,形成新链表)
- 刷LeetCode(1)——两数相加
- LeetCode 2. Add Two Numbers(两数相加)
- Leetcode003--单链表两数相加
- LeetCode之链表数相加
- 链表:两数相加
- 【LeetCode】链表相加 Add Two Numbers - Easy ++
- Leetcode445. 链表相加
- [Leetcode #2]Add Two Numbers 链表存储的两个正数相加
- [LeetCode] 2. Add Two Numbers 两数相加 @python
- LeetCode 2. 两数相加