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

	}
}
相关推荐
名字还没想好☜6 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
.道阻且长.6 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
·薯条大王7 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
To_OC8 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
白狐_7988 小时前
408数据结构第5章:二叉树遍历序列题——技巧、判断与真题型总结
数据结构
kyriewen9 小时前
面试官问"这段逻辑为什么这样写"——我才发现,这半年我写的代码,我自己都解释不了
前端·javascript·面试
一壶浊酒..10 小时前
Scrape Webpack练习
开发语言·javascript·webpack
ZJH__GO10 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆10 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光10 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言