我是小小强,这是我的第8篇原创文章,阅读需要大约10分钟。
题目
LintCode:链表求和
描述
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例
给出两个链表 3->1->5->null
和5->9->2->null
,返回8->0->8->null
思路
题目中要求从链表头节点开始,按位相加,同时进位。那就可以构造一个链表,存放相加结果,同时用一个临时变量存放链表相加之和,如果大于10,则设置进位标志。最后结束时判断进位标志是否为0,不为0,则需要再进位。
实现
java实现
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/public class Solution {/*** @param l1: the first list* @param l2: the second list* @return: the sum list of l1 and l2*/public ListNode addLists(ListNode l1, ListNode l2) {// write your code hereint flag = 0;int a = 0;ListNode ln = new ListNode(0);ListNode tmpln = ln, tmpl1 = l1, tmpl2 = l2, tmp = null;if (l1 == null){return l2;}if (l2 == null){return l1;}if (l1 == null && l2 == null) {return null;}while (tmpl1 != null || tmpl2 != null){if (tmpl1 != null){a += tmpl1.val;}if (tmpl2 != null){a += tmpl2.val;}if (flag > 0) {a += flag;}if( a>=10 ) {flag = 1;a -= 10;}elseflag = 0;tmp = new ListNode(a);tmpln.next = tmp;tmpln = tmp;tmpln.next = null;a = 0;if (tmpl1 != null)tmpl1 = tmpl1.next;if (tmpl2 != null)tmpl2 = tmpl2.next;}if (flag > 0){tmp = new ListNode(1);tmpln.next = tmp;}return ln.next;}}结果分析
结果:结果通过了LintCode的要求。
分析:这种实现比较好理解,但是实现起来却没什么巧妙之处。
其它优化参考
优秀代码
|
|