链表相加(二)

链表相加(二)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b?tpId=295&tqId=1008772&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj

链表相加(二)

图解:

链接

思路:

1.将原先的两个表进行反转,获得新的表头,使得低位对齐

2.将两个表对应节点相加

3.将最后的相加的结果的表再进行一次反转

代码

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    public ListNode ReverseList(ListNode head){
        ListNode pre=null;
        ListNode cur=head;
        ListNode cur_next;
        while(cur!=null){
             cur_next=cur.next;
             cur.next=pre;
             pre=cur;
             cur=cur_next;
        }
        return pre;
    }
    //将两个链表相加,传入两个链表的头结点
    public ListNode addInList (ListNode head1, ListNode head2) {
        //先进行判断一下,如果有一个链表为空,那么就不需要进行相加,直接返回非空的链表
        if(head1==null){
            return head2;
        }
        if(head2==null){
            return head1;
        }
        //由于两个链表不能逆着遍历,又因为进行相加要低位对齐,所以先将两个表进行反转
        head1=ReverseList(head1);
        head2=ReverseList(head2);
        //res表示进位,temp表示相加后的存入链表中的值
        int res=0,temp=0;
        //先创建一个新链表的虚的头结点和一个cur节点
        ListNode dummynode=new ListNode(-1);
        ListNode cur=dummynode;
        //只要还有一个表为非空或者还有进位就需要继续循环
        while(head1!=null||head2!=null||res!=0){
            //先判断一下链表的节点,如果是null,就赋值为0,否则就获得链表的节点的值
            int val1=(head1==null)?0:head1.val;
            int val2=(head2==null)?0:head2.val;
            temp=val1+val2+res;
            res=temp/10;
            temp=temp%10;
            //新创建一个节点,存入相加取余10后的结果,存入新的节点中
            //将cur指向新的节点进行连接,并更新cur为下一个节点
            cur.next=new ListNode(temp);
            cur=cur.next;
            //如果当前的头结点为非空,就向后移动一个节点,否则就没有必要移动了,因为都是null,对应的值都为0
            if(head1!=null){
                head1=head1.next;
            }
            if(head2!=null){
                head2=head2.next;
            }
        }
        //最后再将结果的表反转一下就是两个表相加的结果
        return ReverseList(dummynode.next);
    }
}
全部评论

相关推荐

肖先生~:大一点得到公司面试更能学到点东西
点赞 评论 收藏
分享
03-19 18:27
已编辑
门头沟学院 C++
26学院本太难了,很多公司机筛就给我刷了。机会都难拿到如果是简历存在问题也欢迎拷打————————————————————分割线——————————————————————2026.3.4更新:发完贴之后,时不时投递又收到了不少的笔试/面试邀请。主要是之前投递简历出去之后基本上都是沉默状态,年后好转了不少timeline:2026.01.21 文远知行笔试,半年多没刷算法题 ->挂 (后续HR说春招可以重新安排笔试)2026.2.4     小鹏汇天 技术一面,第二周收到结果 ->挂2026.2.12   大众Cariad代招 技术二面 ->Offer2026.2.28   多益网络技术面试,由于风评太差,一直在犹豫要不要接面试 ->推迟-----------分割线-----------2026.3 月前的某一天,临时去电网报名了二批计算机岗位的笔试2026.3.6 从上家公司实习离职,氛围最好的一家公司,leader 说可以帮忙转正,但是流程太长,而且我们部门据说只有一个 hc,更想要研究生,我很有可能是会被签外包公司在这里干活,就离职了。2026.3.9 入职新公司,大众Cariad 以外部公司的身份进组,项目组签了三年,后续三年应该都可以在这里呆,不知道有没有希望原地跳槽。2026.3.10 电网考试居然说我通过资格审查了,短信约我去参加资格审查,请假一天,买了 12 号晚上的机票回成都2026.3.15 参加国家电网三新计算机类的笔试2026.3.17 电网出成绩了,感觉很低。觉得已经🈚️了2026.3.18 收到电网面试通知,通知 3.22-3.25 这个时间去面试,我的岗位只招 1 个人。据说面试只有 2-3 人,不知道能不能成功
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务