LC-2:两数相加

题目要求:
                    
                    

我的算法代码:(有问题)
public class AtomicDemone {
    public static void main(String[] args) {

        ListNode node1 = new ListNode(2);
        ListNode node2 = new ListNode(4);
        ListNode node3 = new ListNode(3);
        node1.next = node2;
        node2.next = node3;

        ListNode node4 = new ListNode(5);
        ListNode node5 = new ListNode(6);
        ListNode node6 = new ListNode(4);
        node4.next = node5;
        node5.next = node6;

        ListNode listNode = addTwoNumbers(node1, node4);
        while (listNode != null) {
            System.out.println(listNode.val);
            listNode = listNode.next;
        }

    }

    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {

        ArrayList<Integer> list = new ArrayList<>();
        ListNode result = new ListNode(-1);

        int flag = 0; // 标志位,进位标志

        // 对两个链表进行共同遍历
        while (l1 != null && l2 != null) {
            int temp = l1.val + l2.val;
            if (temp > 9) { // 需要进位
                int num1 = temp % 10; // 个位数
                int num2 = temp / 10; // 十位数
                list.add(num1);
                flag = num2; //记录下来
            } else { // 不需要进位,直接添加到ArrayList中
                list.add(temp + flag);
            }
            l1 = l1.next;
            l2 = l2.next;
        }

        // 对l1链表进行剩余遍历
        while (l1 != null) {
            int temp = l1.val + flag;
            if (temp > 9) {
                int num1 = temp % 10; // 个位数
                int num2 = temp / 10; // 十位数
                list.add(num1);
                flag = num2; //记录下来
            } else {
                list.add(temp + flag);
            }
            l1 = l1.next;
        }

        // 对l2链表进行剩余遍历
        while (l2 != null) {
            int temp = l2.val + flag;
            if (temp > 9) {
                int num1 = temp % 10; // 个位数
                int num2 = temp / 10; // 十位数
                list.add(num1);
                flag = num2; //记录下来
            } else {
                list.add(temp + flag);
            }
            l2 = l2.next;
        }

        // 将链表中的元素进行遍历,对每一个元素进行创建新的结点,形成链表进行返回。
        ListNode current = result;
        for (int i = 0; i < list.size(); i++) {
            ListNode temp = new ListNode(list.get(i));
            current.next = temp;
            current = current.next;
        }

        return  result.next;
    }
}


成功实现的代码:

        public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int next1 = 0;
        int total = 0;
        ListNode dummy = new ListNode(-1);
        ListNode cur = dummy;
        while (l1 != null && l2 != null) {
            total = l1.val + l2.val + next1;
            cur.next = new ListNode(total % 10);
            next1 = total / 10;
            l1 = l1.next;
            l2 = l2.next;
            cur = cur.next;
        }

        while (l1 != null) {
            total = l1.val + next1;
            cur.next = new ListNode(total % 10);
            next1 = total / 10;
            l1 = l1.next;
            cur = cur.next;
        }

        while (l2 != null) {
            total = l2.val + next1;
            cur.next = new ListNode(total % 10);
            next1 = total / 10;
            l2 = l2.next;
            cur = cur.next;
        }

        if (next1 != 0) {
            cur.next = new ListNode(next1);
        }

        return dummy.next;
    }

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 11:35
程序员小白条:话太多,没实力和学历,差不多回答回答就行了,身份地位不一样
点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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