这个题是用链表的结构实现加法,由于学习C++的时候接触过链表,所以这个题还算完成的顺利。
这个题要求链表为单向链表,一个链表对象包含着储存的数据和下个节点的地址。java的实现和C++大同小异。
class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public class AddTwoNumber { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode result = new ListNode(0); ListNode t = result, p = l1, q = l2; int carry = 0; while (p!= null && q != null){ int sum = p.val + q.val + carry; carry = 0; if (sum > 9) { sum -= 10; carry = 1; } t.next = new ListNode(sum); t = t.next; p = p.next; q = q.next; } while (p != null){ int sum = p.val + carry; carry = 0; if (sum > 9) { sum -= 10; carry = 1; } t.next = new ListNode(sum); t = t.next; p = p.next; } while (q != null){ int sum = q.val + carry; carry = 0; if (sum > 9) { sum -= 10; carry = 1; } t.next = new ListNode(sum); t = t.next; q = q.next; } if (carry == 1) { t.next = new ListNode(1); } return result.next; } }
标答版本见LeetCode网站吧。
在这我说说我发现的几点要有意思的地方:
1.感觉这个东西的设计暗含着全加器的理念。
2.注意最后一个进位是否为一。
3.这个读取两个链表的过程和归并排序有异曲同工之妙。