LeetCode(2) Add Two Numbers实现
2015-02-25 22:12
441 查看
题目:https://oj.leetcode.com/problems/add-two-numbers/
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
实现两个链表的数字累加,即243+564=708
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
实现两个链表的数字累加,即243+564=708
解决思路:
直接遍历列表,从左向右累加,注意进位问题即可实现:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { //返回的结果 ListNode res = new ListNode(0); //左值 int leftVal; //右值 int rightVal; //是否进位 boolean isCarry = false; //判断是否是第一次计算,用于保留指针 ListNode leftNext = l1; ListNode rightNext = l2; ListNode curNode = res; while(leftNext != null || rightNext != null || isCarry){ if(curNode.next == null){ curNode.next = new ListNode(0); curNode = curNode.next; } //优化时可直接拼接 ,即其中一边的节点已经计算完,后面可以直接把指针指向剩下的部分 leftVal = 0; if(leftNext != null){ leftVal = leftNext.val; leftNext = leftNext.next; } rightVal = 0; if(rightNext != null){ rightVal = rightNext.val; rightNext = rightNext.next; } int resVal = leftVal + rightVal; //把上一次的进位加进来 if(isCarry){ resVal = resVal + 1; isCarry = false; } if(resVal >= 10){ isCarry = true; resVal = resVal % 10; } curNode.val = resVal; } return res.next; }
OJ测试:
通过调试例子:
public static void main(String[] args) { AddTwoNumbers atn = new AddTwoNumbers(); ListNode l1 = atn.new ListNode(2); l1.next = atn.new ListNode(4); l1.next.next = atn.new ListNode(3); l1.next.next.next = atn.new ListNode(9); ListNode l2 = atn.new ListNode(5); l2.next = atn.new ListNode(6); l2.next.next = atn.new ListNode(4); l2.next.next.next = atn.new ListNode(4); System.out.println(l1); System.out.println(l2); ListNode res = atn.addTwoNumbers(l1, l2); System.out.println(res); }
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- leetcode 2. Add Two Numbers python实现的理解,结点,单链表的应用,大数,进位的问题
- leetcode 【 Add Two Numbers 】 python 实现
- 【LeetCode】【Python】【C++】2. Add Two Numbers代码实现
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- [Leetcode] Add Two Numbers Python实现 详细讲解
- [LeetCode][2]Add Two Numbers解析 -Java实现
- LeetCode java实现Add Two Numbers
- LeetCode 2. Add Two Numbers (C++/python/js实现)
- LeetCode题解(Golang实现)--Add Two Numbers
- [LeetCode][2 Add Two Numbers][medium]Java实现
- [LeetCode]4 Add Two Numbers(C++,Python实现)
- LeetCode-2. Add Two Numbers(链表实现数字相加)
- [Leetcode]Add Two Numbers 链表实现大数字相加
- LeetCode 之 Add Two Numbers — C 实现
- C实现 LeetCode->Add Two Numbers
- LeetCode-java实现-T2-Add Two Numbers
- leetcode 59: Add Two Numbers
- leetcode 59: Add Two Numbers
- Leetcode : Add Two Numbers