Leetcode-面试题 02.05 链表求和

作者: itbird01 | 来源:发表于2021-10-07 07:00 被阅读0次

面试题 02.05. 链表求和

解题思路

1.分析题意,两个链表,是个位数在首部,所以实现同位相加即可
2.遍历两个链表,逐位相加,如果大于10,则累加到下一位
3.当前节点的值为(l1.val + l2.val + add) % 10
4.遍历完成两个链表,如果结果还有一次进位,则new ListNode(1)

解题遇到的问题

1.两个链表可能长短不一,其实这时可以简化题意,当某一个链表下一位为空时,可以认为当前位为0

int a = l1 == null ? 0 : l1.val;
int b = l2 == null ? 0 : l2.val;

2.结果链表,刚开始没有数据,需要注意初始化的特殊操作

if (result == null) {
    result = new ListNode(vaule);
    head = result;
} 

后续需要总结学习的知识点

是否有其他解法?

##解法
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode result = null;
        ListNode head = null;
        int add = 0;
        while (l1 != null || l2 != null) {
            int a = l1 == null ? 0 : l1.val;
            int b = l2 == null ? 0 : l2.val;
            int vaule = (a + b + add) % 10;
            if (a + b + add > 9) {
                add = 1;
            } else {
                add = 0;
            }
            if (result == null) {
                result = new ListNode(vaule);
                head = result;
            } else {
                ListNode t = new ListNode(vaule);
                result.next = t;
                result = result.next;
            }

            if (l1 != null) {
                l1 = l1.next;
            }
            if (l2 != null) {
                l2 = l2.next;
            }
        }
        if (add == 1) {
            ListNode t = new ListNode(1);
            result.next = t;
        }
        return head;
    }

    public class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }
    }
}

相关文章

网友评论

    本文标题:Leetcode-面试题 02.05 链表求和

    本文链接:https://www.haomeiwen.com/subject/yhfrnltx.html