1. 两数相加问题

给定两个链表,分别表示两个非负整数。他们的数字逆序存储在链表中,且每个节点只存储一个数字,计算两个数的和,并且返回和的链表头指针。

    如:输入:2->4->3 ,  5->6->4, 输出:7->0->8.

分析:因为两个数都是逆序存储的,因此可以从头往后加,而且每个节点存储的都是个位数,因此相加不会超过18。模拟两个数按位相加的过程就可以了。用一个额外的变量记录当前位相加是否有进位。

注意:

  • 当两个链表长度不相等时该怎么处理?
  • 最后一位是否有进位?

 

/**
     * 该算法计算两个逆序放置的链表的和,返回和的头指针
     * 如:输入:2->4->3 ,  5->6->4, 输出:7->0->8.
     * @param l1
     * @param l2
     * @return 
     */
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode h = new ListNode(-1);
        ListNode res = h;
        int flag = 0;
        ListNode p = l1, q = l2;
        while( p != null && q != null) {
            int temp = p.val + q.val;
            if(flag == 1)
                temp++;
            
            flag = temp / 10;
            temp %= 10;
            ListNode node = new ListNode(temp);
            res.next = node; 
            res = res.next;
            
            p = p.next;
            q = q.next;
        }
        while(p != null) {
            int temp = p.val;
            if(flag == 1) 
                temp++;
            
                
            flag = temp / 10;
            temp %= 10;
            ListNode node = new ListNode(temp);
            res.next = node; 
            res = res.next;
            p = p.next;
        }
        
        while(q != null) {
            int temp = q.val;
            if(flag == 1) 
                temp++;
            
            flag = temp / 10;
            temp %= 10;
            ListNode node = new ListNode(temp);
            res.next = node; 
            res = res.next;
            
            q = q.next;
        }
        if(flag == 1) {
            ListNode node = new ListNode(1);
            res.next = node;
        }
        return h.next;
    }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-07
  • 2021-09-09
  • 2022-12-23
  • 2022-12-23
  • 2021-06-26
  • 2022-12-23
猜你喜欢
  • 2021-11-23
  • 2022-12-23
  • 2021-12-05
  • 2022-03-02
  • 2021-07-12
  • 2021-08-25
相关资源
相似解决方案