leetcode445-Add Two Numbers II

题目

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

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

示例1:

输入:l1 = 7,2,4,3, l2 = 5,6,4

输出:7,8,0,7

分析

可以先翻转链表,把最低位放到最前面然后开始进行相加,注意和超过10需要进位

java 复制代码
public class LinkNode {
	int val;
	LinkNode next;

	public LinkNode(int data) {
		this.val = data;
		this.next = null;
	}
}
public class LinkList {
	LinkNode head;
	public LinkList() {
		this.head = null;
	}
	public LinkNode getHead() {
		return this.head;
	}
	//添加元素
	public void addNode(int data) {
		LinkNode node = new LinkNode(data);
		if (this.head == null) {
			this.head = node;
		} else {
			LinkNode cur = this.head;
			while(cur.next != null) {
				cur = cur.next;
			}
			cur.next = node;
		}
	}
	//正序打印
	public void print(LinkNode node) {
		while(node != null) {
			System.out.print(node.val);
			System.out.print(" ");
			node = node.next;
		}
		System.out.println();
	}
	public LinkNode addTwoNumbers(LinkNode l1, LinkNode l2) {
        	LinkNode p1 = reverse(l1);
	        LinkNode p2 = reverse(l2);
        	int count = 0;
        	LinkNode head = new LinkNode(-1);
        	LinkNode p = head;
        	while(p1 != null || p2 != null) {
            		int numa = 0;
            		if(p1 != null) {
                		numa = p1.val;
            		}
            		int numb = 0;
            		if(p2 != null) {
                		numb = p2.val;
            		}
            		int sum = numa + numb + count;
            		if(sum >= 10) {
                		p.next = new LinkNode(sum % 10);
                		count = sum / 10;
            		} else {
                		p.next = new LinkNode(sum);
                		count = 0;
            		}
            		p = p.next;
			if(p1 != null) {
				p1 = p1.next;
			}
			if(p2 != null) {
				p2 = p2.next;
			}
        	}
        	if(count > 0) {
            		p.next = new LinkNode(count);
            		p = p.next;
        	}
        	LinkNode node = reverse(head.next);
		print(node);
		return node;
    	}
    	public LinkNode reverse(LinkNode l1) {
        	LinkNode pre = null;
        	while(l1 != null) {
            		LinkNode next = l1.next;
            		l1.next = pre;
            		pre = l1;
            		l1 = next;
        	}
        	return pre;
	}
}
public class addTwoNumbersII {
	public static void main(String[] args) {
		LinkList list = new LinkList();
		list.addNode(7);
		list.addNode(2);
		list.addNode(4);
		list.addNode(3);
		LinkList lista = new LinkList();
		lista.addNode(5);
		lista.addNode(6);
		lista.addNode(4);
		list.addTwoNumbers(list.getHead(),lista.getHead());

	}
}
相关推荐
.痞老板.4 分钟前
java ee--多线程(进阶)
java·java-ee
Pniubi19 分钟前
关于算法用现成数据结构和手撕
数据结构
深入云栈2 小时前
Netty 4.2.x 源码深度解析 (二十三):ByteBuf 核心设计 —— 索引、类型与零拷贝
java·后端·架构
爱笑的k112 小时前
nano-vllm 源码剖析:千行 Python 手写离线推理引擎的调度、显存与并行时序
开发语言·python·vllm
聪明的笨猪猪2 小时前
企业知识库AI架构选型:落地导向的架构决策与组件清单
经验分享·面试·架构·embedding·数据库架构
wang_shu_mo_ran3 小时前
MyBatis 从入门到进阶(一)
java·spring·mybatis
X1A0RAN3 小时前
PPT 图片批量处理教程:导出全部幻灯片 · 提取全部素材
开发语言·javascript·powerpoint
量化分析码农4 小时前
股票历史数据的复权参数对照:多级别返回的字段与数值差异
java·javascript·后端
猫猫不是喵喵.4 小时前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
熊猫钓鱼>_>4 小时前
普通用户视角的端侧智能体验手记【鸿蒙心迹】
开发语言·人工智能·华为·智能手机·性能优化·ai编程·harmonyos