• 两数相加


    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807

    leetcode上面的题目

    题目思路还是很简单的。

    初始粗糙代码

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode l3  = new ListNode(-1);
    //        ListNode l3 = head;
            int v1 , v2 , v3;
            boolean flag = false;
            boolean isHead = true;
            ListNode temp;
            while(l1!=null&&l2!=null){
                v1 = l1.val;
                v2 = l2.val;
                if(flag){
                    v3 = v1+v2+1;
                    if(v3>=10){
                        v3 =v3-10;
                        flag = true;
                    }else{
                        flag = false;
                    }
                }else{
                    v3 = v1+v2;
                    if(v3>=10){
                        v3 =v3%10;
                        flag = true;
                    }else{
                        flag = false;
                    }
                }
                l1 = l1.next;
                l2 = l2.next;
                temp = new ListNode(v3);
                System.out.println("----------"+v3+"---------");
                if(isHead){
                    l3 = temp;
                    isHead = false;
                }
                temp = temp.next;
            }
            while(l1 == null && l2 !=null){
                if(flag){
                    v2 = l2.val;
                    v3 = v2+1;
                    if(v3>=10){
                        v3 = v3%10;
                        flag = true;
                    }else{
                        flag = false;
                    }
                    temp = new ListNode(v3);
                    temp = temp.next;
                }else{
                    temp = l2;
                    break;
                }
            }
            while(l1 != null && l2 ==null){
                if(flag){
                    v2 = l2.val;
                    v3 = v2+1;
                    if(v3>=10){
                        v3 = v3-10;
                        flag = true;
                    }else{
                        flag = false;
                    }
                    temp = new ListNode(v3);
                    temp = temp.next;
                }else{
                    temp = l1;
                    break;
                }
            }
            if(l1 == null && l2 == null && flag == true){
                v3 = 1;
                temp = new ListNode(v3);
                temp = temp.next;
            }
            if(null!=l3){
                return l3;
            }else{
                return null;
            }
        
        }
    }

    运行结果始终只能输出第一个节点,链不起来。不知道怎么回事,欢迎大佬解答。

    加了头结点,用head.next输出结果居然正确了。


    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode head  = new ListNode(-1);
            // ListNode l3 = head;
            int v1 , v2 , v3;
            boolean flag = false;
            // boolean isHead = true;
            ListNode temp = head;
            while(l1!=null&&l2!=null){
                v1 = l1.val;
                v2 = l2.val;
                if(flag){
                    v3 = v1+v2+1;
                    if(v3>=10){
                        v3 =v3-10;
                        flag = true;
                    }else{
                        flag = false;
                    }
                }else{
                    v3 = v1+v2;
                    if(v3>=10){
                        v3 =v3%10;
                        flag = true;
                    }else{
                        flag = false;
                    }
                }
                l1 = l1.next;
                l2 = l2.next;
                temp.next = new ListNode(v3);
                System.out.println("----------"+v3+"---------");
                // if(isHead){
                //     l3.next = temp;
                //     isHead = false;
                // }
                temp = temp.next;
            }
            while(l1 == null && l2 !=null){
                if(flag){
                    v2 = l2.val;
                    v3 = v2+1;
                    if(v3>=10){
                        v3 = v3%10;
                        flag = true;
                    }else{
                        flag = false;
                    }
                    temp.next = new ListNode(v3);
                    temp = temp.next;
                    l2 = l2.next;
                }else{
                    temp.next = l2;
                    break;
                }
            }
            while(l1 != null && l2 ==null){
                if(flag){
                    v1 = l1.val;
                    v3 = v1+1;
                    if(v3>=10){
                        v3 = v3-10;
                        flag = true;
                    }else{
                        flag = false;
                    }
                    temp.next = new ListNode(v3);
                    temp = temp.next;
                    l1 = l1.next;
                }else{
                    temp.next = l1;
                    break;
                }
            }
            if(l1 == null && l2 == null && flag == true){
                v3 = 1;
                temp.next = new ListNode(v3);
                temp = temp.next;
            }
            return head.next;
        
        }
    }

    关于扎娃链表部分的操作之前在项目中基本没用到是一个薄弱点。抓紧补好啊!

  • 相关阅读:
    Android开发环境配置
    Spring API后端原理及最佳实践
    Hibernate 编程
    MySQL 远程访问
    MySQL 5.7 8.0 重置密码
    H5 流媒体
    你不知道的项目
    Promise
    Why Vuex
    Vue 技术细节
  • 原文地址:https://www.cnblogs.com/xunzhaorendaxia/p/10231245.html
Copyright © 2020-2023  润新知