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());

	}
}
相关推荐
冷雨夜中漫步7 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴7 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
JH30738 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
m0_736919109 小时前
C++代码风格检查工具
开发语言·c++·算法
Coder_Boy_9 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934739 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
invicinble9 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
发现一只大呆瓜10 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试
较真的菜鸟10 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖10 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言