博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode刷题系列——Add Two Numbers
阅读量:6457 次
发布时间:2019-06-23

本文共 3458 字,大约阅读时间需要 11 分钟。

 

  这个题目很简单,归并而已,好久没练编程,居然忘了在使用自定义类型前,要进行初始化(new操作)。

class ListNode{    int val;    ListNode next;    ListNode(int x){        val = x;    }} //在使用之前ListNode得next变量前需要进行初始化: ListNode node = new ListNode(1); a = node.next; a = new ListNode(2); //上面是不能通过node找到刚刚初始化的a, 只有通过下面这种方式才能找到next,形成一条链 node.next = new ListNode(3); a = node.next; //此时对a操作才能,才能形成对一条链的操作

  以前我认为归并需要分成3部分,while()直到node1和node2其中一个为空,然后再while()非空的那个node,但是不同场景应用方式也不同,如果遇到归并相加问题,就不用那么麻烦,代码对比一下就知道了。

public class Solution {        public static void main(String[] args) {        int[] data1 = new int[] {1};        int[] data2 = new int[] {9,9};        ListNode node1 = new ListNode(data1[0]);        ListNode node2 = new ListNode(data2[0]);        ListNode tmp = node1;        for(int i = 1; i < data1.length; i ++) {            tmp.next = new ListNode(data1[i]);            tmp = tmp.next;        }        tmp = node2;        for(int i = 1; i < data2.length; i ++) {            tmp.next = new ListNode(data2[i]);            tmp = tmp.next;        }        Solution s = new Solution();        tmp = s.addTwoNumbers(node1, node2);        while(tmp != null) {            System.out.format("%d ", tmp.val);            tmp = tmp.next;        }    }        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        ListNode head = new ListNode(0);        ListNode cur_node = head;        int carry = 0;        while(l1 != null || l2 != null) {            int x = (l1 == null) ? 0 : l1.val;            int y = (l2 == null) ? 0 : l2.val;            int val = x + y + carry;            carry = val / 10;            cur_node.next = new ListNode(val % 10);            cur_node = cur_node.next;            if(l1 != null)                l1 = l1.next;            if(l2 != null)                l2 = l2.next;        }        if(carry > 0) {            cur_node.next = new ListNode(1);        }        return head.next;    }        private class HelpMergeReturn{        int flag;        ListNode node;        HelpMergeReturn(int f, ListNode n){            flag = f;            node = n;        }    }        private HelpMergeReturn helpMerge(ListNode node, ListNode l, int flag) {        while(l != null) {            int val = l.val + flag;            flag = val / 10;            node.next = new ListNode(val % 10);            node = node.next;            l = l.next;        }        return new HelpMergeReturn(flag, node);    }        public ListNode addTwoNumbers1(ListNode l1, ListNode l2) {        int flag = 0;        ListNode result = null;        ListNode tmp_node = null;        while(true) {            if(l1 == null || l2 == null)                break;            int val = l1.val + l2.val + flag;            flag = val / 10;            if(tmp_node == null) {                tmp_node = new ListNode(val % 10);                result = tmp_node;            }            else {                tmp_node.next = new ListNode(val % 10);                tmp_node = tmp_node.next;            }            l1 = l1.next;            l2 = l2.next;        }        HelpMergeReturn hm = null;        if(l1 != null) {            hm = helpMerge(tmp_node, l1, flag);        }        if(l2 != null) {            hm = helpMerge(tmp_node, l2, flag);        }        if(hm != null) {            tmp_node = hm.node;            flag = hm.flag;        }        if(flag != 0) {            tmp_node.next = new ListNode(flag);        }        return result;    }}

 

转载于:https://www.cnblogs.com/BrotherXiang/p/8568080.html

你可能感兴趣的文章
交换机二层接口access、trunk、hybird三种模式对VLAN的处理过程
查看>>
jQuery.extend 函数详解
查看>>
[转]Windows的批处理脚本
查看>>
lnmp高人笔记
查看>>
[转载] OpenCV2.4.3 CheatSheet学习(三)
查看>>
C#中跨窗体操作(2)--消息机制
查看>>
子程序框架
查看>>
多维数组元素的地址
查看>>
maven的错误记录
查看>>
数据库运维体系_SZMSD
查看>>
aspose 模板输出
查看>>
福大软工1816 · 第三次作业 - 结对项目1
查看>>
selenium多个窗口切换
查看>>
《单页面应用》所获知识点
查看>>
静态库 调试版本 和发布版本
查看>>
DB2 错误码解析
查看>>
读书笔记四
查看>>
JAVA中的finalize()方法
查看>>
慕课网学习手记--炫丽的倒计时效果Canvas绘图与动画基础
查看>>
==与equals()的区别
查看>>