[Lesson Learn] LeetCode #2 Add Two Numbers

来源:互联网 发布:新网域名转入腾讯云 编辑:程序博客网 时间:2024/05/17 23:01

本题思路很简单,就是合并两个链表,这是数据结构方面最基础的题目。

我自己写的代码就不贴了,跟LeetCode官方提供的代码差太远……需要好好学习。

以下是官方提供的Java代码:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {    ListNode dummyHead = new ListNode(0);    ListNode p = l1, q = l2, curr = dummyHead;    int carry = 0;    while (p != null || q != null) {        int x = (p != null) ? p.val : 0;        int y = (q != null) ? q.val : 0;        int sum = carry + x + y;        carry = sum / 10;        curr.next = new ListNode(sum % 10);        curr = curr.next;        if (p != null) p = p.next;        if (q != null) q = q.next;    }    if (carry > 0) {        curr.next = new ListNode(carry);    }    return dummyHead.next;}

[Lesson Learn]

1. 建立3个新的链表,使得遍历链表时不影响原来的链表。

2. 代码复用率。两个链表不一样长,这个是很容易想到的。但如何处理就看出水平了。将判断写在while上,则需要写三个while语句(l1和l2都没有遍历完,l1遍历完而l2没有遍历完,l1没有遍历完而l2遍历完),三段代码彼此仅仅只有几行不一样,代码复用率太低。而将判断写在while语句里,则代码复用率得到极大提升。

3. 条件运算符。使用条件运算符,优化了代码,简洁明了。

4. 理解原理是一回事,写出能用的代码是另一回事。切勿眼高手低。


附:

LeetCode #2 题目

LeetCode #2 官方“参考答案”

0 0