牛客网编程高频题24——NC40两个链表生成相加链表

目录

两个链表生成相加链表

描述

示例1

备注

方法:倒序相加


两个链表生成相加链表

描述

假设链表中每一个节点的值都在 0 到 9 之间,那么链表整体就可以代表一个整数。

给定两个这种链表,请生成代表两个整数相加值的结果链表。

例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

示例1

输入:

[9,3,7],[6,3]

返回值:

{1,0,0,0}

备注

1\le n,m\le 10^6

0\le a_i,b_i\le 9

链表的数据结构如下:

public class ListNode {
   int val;
   ListNode next = null;
}

方法:倒序相加

先将链表翻转,然后从个位开始相加,记录进位信息,和大数相加思想类似,将结果写入链表,最后将结果翻转

import java.util.*;

public class Solution {
    public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        ListNode p1=reverse(head1),p2=reverse(head2),res=new ListNode(0),cur=res;
        int carry=0,sum;

        while(p1!=null||p2!=null||carry!=0){
            int n1=(p1==null?0:p1.val);//取第一个数的最后一位
            int n2=(p2==null?0:p2.val);//取第二个数的最后一位
            sum=(n1+n2+carry)%10;
            carry=(n1+n2+carry)/10;
            cur.next=new ListNode(sum);
            cur=cur.next;
            if(p1!=null) p1=p1.next;
            if(p2!=null) p2=p2.next;
        }
        return reverse(res.next);
    }
    
    //翻转链表
    public ListNode reverse(ListNode head){
        if(head==null||head.next==null) {
            return head;
        }

        ListNode cur=head,pre=null;
        while(cur!=null){
            ListNode next=cur.next;
            cur.next=pre;
            pre=cur;
            cur=next;
        }
        return pre;
    }
}

 运行结果如图,

猜你喜欢

转载自blog.csdn.net/weixin_39478524/article/details/117448585
今日推荐