`
liubangchuan
  • 浏览: 15974 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

LeetCode Problem:链表相加

 
阅读更多

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

 

思路:遍历链表即可。

需要注意的两点:

1) 相加到10之后会进位,需要保留这个进位

2) 如果是最后一位加完还有进位,那么会再新建一个节点

 

程序如下:

public class LinkedListAddition {
	public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode l3 = new ListNode(0);
		ListNode head = l3;
		if(l1==null){
			return l2;
		}
		if(l2==null){
			return l1;
		}
		int val = 0;
		int advance = 0;
		while(l1!=null && l2!=null){
			val = l1.val + l2.val + advance;
			if(val >= 10){
				val =val - 10;
				advance = 1;
			}else{
				advance = 0;
			}
			ListNode node = new ListNode(val);
			node.next = null;
			l3.next = node;
			l3 = l3.next;
			
			l1 = l1.next;
			l2 = l2.next;
		}
		if(l1 == null && l2 == null && advance == 1){
			ListNode last = new ListNode(advance);
			last.next = null;
			l3.next = last;
		}
		if(l1 !=null){
			l3.next = l1;
			addAdvance(l1,advance);
		}else if (l2 != null){
			l3.next = l2;
			addAdvance(l2,advance);
		}
		return head.next;
	}

	public static void addAdvance(ListNode l,int advance){
		if(l == null){
			return;
		}
		ListNode pre = l;
		while(l != null){
			l.val = l.val + advance;
			if(l.val >=10){
				l.val = l.val - 10;
			}else{
				advance = 0;
			}
			pre = l;
			l = l.next;
		}
		if(advance == 1){
			ListNode last = new ListNode(advance);
			last.next = null;
			pre.next = last;
		}
	}
	static class ListNode {
		int val;
		ListNode next;

		ListNode(int x) {
			val = x;
			next = null;
		}
	}
}

 

分享到:
评论

相关推荐

    leetcode答案-algorithm_problem_solving:CTCI书籍和Leetcode问题的解决方案

    两个数字相加 + 链表 回文链表 ——! :star: 链表 两个链表的交集 —— 链表 链表循环 + :star: :star: 细绳 最长有效括号 —— :star: :star: :star: 数组、堆栈 截留雨水 —— :star: :star: :star: 堆 有效括号 ...

    判断链表是否为回文链表leetcode-daily-coding:练习解决问题的能力

    将两个数字相加并将其作为链表返回。 您可以假设这两个数字不包含任何前导零,除了数字 0 本身。 例子: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807. 解决方案 一次...

    leetcode285-leetcode:leetcode

    problem 难度 使用语言 思路 提交次数 WA点 star 1 两数之和 简单 C++ 2 两数相加 中等 Java 3 无重复字符的最长子串 中等 Java 5 最长回文子串 中等 python 7 整数反转 简单 python 8 字符串转换整数(atoi) 中等 ...

    Leetcode:LeetCode 刷题总结

    例如,"两数之和"(Two Sum)是经典的数组问题,要求找到数组中使得它们相加等于特定目标值的两个元素的索引。 2. **链表**:链表问题涉及节点的插入、删除、反转、合并等操作。例如,"两链表的交点"(Intersection...

    LeetCode:LeetCode刷题

    例如,"两数相加"(Add Two Numbers)问题,需要将两个链表表示的数字相加。 3. **字符串(String)**:字符串处理涉及模式匹配、反转、子串查找等。例如,"无重复字符的最长子串"(Longest Substring Without ...

    LeetCode:LeetCode上一些算法的解答

    首先,LeetCode上的问题主要分为几种类型:数组、链表、栈、队列、哈希表、二叉树、回溯、动态规划、位操作、图算法等。这些题目涵盖了计算机科学的基础算法和数据结构,是软件工程师面试和日常工作中经常会遇到的...

    leetcode:我对Leetcode问题的解决方案的集合

    例如,"两数之和"(Two Sum)问题,可以通过哈希表在O(n)的时间复杂度内找到两个数相加等于目标值的元素。 2. **字符串**:字符串问题则涉及模式匹配、子串查找和字符串操作。比如,"无重复字符的最长子串"...

    leetcode-problem-solution:你好 ! 在这里,您可以找到使用cpp或java语言的Leetcode Judge问题的解决方案代码。 您还可以在此处找到比赛时间解决方案代码。 快乐编码

    在LeetCode中,链表问题经常出现,如两数相加、删除中间节点、反转链表等。 2. **算法(Algorithms)**:这是一门广泛的学科,包括排序、搜索、图论、动态规划等。LeetCode中的问题通常要求应用这些算法来解决特定...

    leetcode下载-LeetCodeAnimation:力码动画

    Problem Article Animation Date 000 十大经典排序算法 001 两数之和 002 两个数字相加 003 无重复字符的最长子串 019 删除链表的倒数第N个节点 020 有效的括号 024 两两交换链表中的节点 026 删除排序数组中的重复...

    leetcode-problem

    在编程领域,LeetCode 是一个非常著名的在线平台,它提供了大量的算法题目,旨在帮助程序员提升技能,准备面试,...对于LeetCode-problem-master这个压缩包,可能是包含了这三个问题的解题代码,供学习者参考和学习。

    leetcode中文版-LeetCodeAnimation:力码动画

    Problem Article Animation 000 十大经典排序算法 001 两数之和 002 两个数字相加 003 无重复字符的最长子串 019 删除链表的倒数第N个节点 020 有效的括号 024 两两交换链表中的节点 026 删除排序数组中的重复项 075...

    lrucacheleetcode-LeetCodeSolutions:https://leetcode.com/problemset/algo

    lru缓存leetcode 力码解决方案 问题在 最大和子数组 买卖股票以获得最大利润 排序数组到 BST 产品以外的自我 平衡二叉树 树是否对称 从中序和预序遍历构造树 二叉树的 LCA(不一定是 BST) 填充树的下一个右指针 根...

    java二叉树算法源码-algorithm-primer:algorithmprimer-算法基础、Leetcode编程和剑指offer,Ja

    两数相加 Add Two Numbers Medium 19 删除链表倒数第N个节点 Remove Nth Node From End of List Medium 21 合并两个有序链表 Merge Two Sorted Lists Easy 141 判断链表是是否存在环 Linked List Cycle Easy 142 ...

    双指针.docx

    删除链表的倒数第 N 个结点 - LeetCode) 在链表问题中,双指针经常被用来找到链表的特定节点。在这个问题中,一个指针先移动N步,然后两个指针一起移动,当先移动的指针到达链表尾部时,另一个指针就指向了倒数第N...

    javalruleetcode-leetCodeQuestionsSolving:leetCodeQuestionsSolving

    对于“添加两个数字”这样的搜索“problem_2”和“src/com/kunal/leetcode”中的解决方案 到现在解决的问题 两个数字相加无重复字符的最长子串最长回文子串字符串到整数 (atoi) 盛水最多的容器电话号码的字母组合从...

    js.projecteuler

    JavaScript支持数组、对象、链表、栈、队列等多种数据结构,同时,我们还需要掌握基本的算法,如排序(冒泡、选择、插入、快速、归并等)、查找(线性、二分)、递归等。 三、JavaScript的数学运算 Project Euler...

    Back_Joon_Question:백준문제연습

    8. 链表(Linked Lists):如两数相加、删除中间节点等,处理链式存储的数据结构。 9. 哈希表(Hash Tables):用于快速查找和去重,例如计算数组中的重复元素。 在练习BaekJoon问题时,开发者会遇到不同难度级别的...

Global site tag (gtag.js) - Google Analytics