牛客网刷题-两个链表生成相加链表

问题描述

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

输入描述:
输入两个链表

输出描述:
输出两个链表和的集合

示例

示例1

输入
[9,3,7],[6,3]

输出
{1,0,0,0}

解决思路

分析

  1. 链表正序没法计算,因为需要考虑进位的问题,所以我们需要先将链表倒置,然后依次加和得到结果。

方法

  1. 链表正序没法计算,因为需要考虑进位的问题,所以我们需要先将链表倒置,然后依次加和得到结果。

代码实现

// 思路1
public class Solution {
    
      
        public ListNode addInList(ListNode head1, ListNode head2) {
    
    
        head1 = revert(head1);
        head2 = revert(head2);

        ListNode dummy = new ListNode(0);
        ListNode temp = dummy;
        int carry = 0;
        while (head1 != null && head2 != null) {
    
    
            int val = head1.val + head2.val + carry;
            temp.next = new ListNode(val % 10);
            carry = val/10;
            temp = temp.next;
            head1 = head1.next;
            head2 = head2.next;
        }

        while (head1 != null) {
    
    
            int val = head1.val + carry;
            temp.next = new ListNode(val % 10);
            carry = val/10;
            temp = temp.next;
            head1 = head1.next;
        }

        while (head2 != null) {
    
    
            int val = head2.val + carry;
            temp.next = new ListNode(val % 10);
            carry = val/10;
            temp = temp.next;
            head2 = head2.next;
        }

        if (carry != 0) {
    
    
            temp.next = new ListNode(carry);
        }

        return revert(dummy.next);
    }

    // 链表的倒置
    private ListNode revert(ListNode head) {
    
    
        if (head == null) {
    
    
            return null;
        }

        ListNode prev = null;
        ListNode now = head;
        while (now != null) {
    
    
            ListNode next = now.next;
            now.next = prev;
            prev = now;
            now = next;
        }

        return prev;
    }
}

时间复杂度分析:
O(M+N):最终结果链表的倒置需要将整个链表的和遍历一遍,所以时间复杂度为O(M+N)【PS:这里也可以优化一下,时间复杂度为链表最长的一个,省去最后一步链表的倒置】

空间复杂度分析:
O(M+N):链表倒置后,使用了额外的空间存储。

小伙伴如果想测试的话,可以直接到牛客网这个链接做测试

两个链表生成相加链表-牛客网

猜你喜欢

转载自blog.csdn.net/qq_35398517/article/details/113748391
今日推荐