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

	}
}
相关推荐
艾莉丝努力练剑3 分钟前
【AI大模型接入SDK】SSE协议
c++·学习·面试·大模型·sdk
斑马1395 分钟前
Linux软件编程学习笔记(五)——线程
开发语言·php
2601_961901705 分钟前
SpringCloud2023集成Nacos2.4.3
java
玄昌盛不会编程7 分钟前
LeetCode——2091. 从数组中移除最大值和最小值
java·算法·leetcode
Rain的Java大神之路10 分钟前
如何保证接口幂等
java·经验分享·后端·面试·架构
吴声子夜歌11 分钟前
Java——数组和集合(一)
java·开发语言
Jesse_EC13 分钟前
一个看不见的字符——CRLF 如何让我的 Docker 初始化脚本"静默失踪"
java·后端
深念Y13 分钟前
Nuxt 项目 Docker 构建:从 pnpm+node 迁移到全 bun
java·前端·docker
学长毕业设计17 分钟前
基于SpringBoot的社区鲜奶订购系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
呆呆敲代码的小Y18 分钟前
Lua 上值(UpValue)
开发语言·junit·lua·lua上值·upvalue