Leetcode链表算法

两数相加

难度:中等       类型: 链表



给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

示例

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

解题思路



两个列表同时遍历,逐位相加,保留进位

代码实现

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        dummy = ListNode(0)
        cur = dummy
        carry = 0
        while l1 or l2:
            num1 = l1.val if l1 else 0
            num2 = l2.val if l2 else 0
            sum = num1 + num2 + carry

            carry = sum // 10
            cur.next = ListNode(sum%10)
            cur = cur.next
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
        if carry:
            cur.next = ListNode(carry)
        return dummy.next

作者:wzNote
链接:https://www.jianshu.com/p/8ea60c68cde7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/xinghaiyige/p/12700369.html

时间: 2024-08-30 11:03:32

Leetcode链表算法的相关文章

leetcode链表算法题实现思路

找出两个链表的交点(leetcode160) 一条链表遍历完之后跳转到下一条链表的头节点继续遍历.  因为当两条链表均被遍历一遍以后,第二次遍历时会同时到达节点相等的地方.如果没有相交的节点,两条链表均遍历两遍后,同时等于null,故返回null. public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode l1 = headA, l2 = headB; while (l1 != l2) { l1

链表算法-链表前面插入节点

链表算法-链表前面插入节点

链表算法-后面插入节点

链表算法-后面插入节点

链表算法总结

这篇博客就总结一下关于链表的各种题,来源POJ和LeetCode,一点一点的扩充,遇到题目就补进来. (1)LeetCode  61. Rotate List 双指针,先计数求长度,不要一前一后一起跑 public class Solution { public ListNode rotateRight(ListNode head, int n) { if (head==null||head.next==null) return head; ListNode dummy=new ListNode

链表算法递归的理解

一:前言 今天在博客园里面看了一篇文章http://www.cnblogs.com/huangxincheng/p/4051854.html(单链表的倒置),其实自己看了一个小时最后那点还是没看明白,自己的不明白在于,递归调用到最后执行递归下面的代码是怎么执行的,如果执行了,执行时的数据从哪来的?我就是这点想不明白,但是我自己能看懂这个代码.此时的想不明白不知道算不算钻牛角尖.还是先说说自己的理解吧!!! 二:我把他的那段代码复制过来了,单链表我自己又随便写个是:9---->6------->

leetcode 链表题总结

按照frequency来排序,总共27题 1.2. Add Two Numbers https://leetcode.com/problems/add-two-numbers/#/description 两个链表相加,注意就是进位问题. /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } *

iOS 单链表算法的一些问题

链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域. 相比于线性表顺序结构,操作复杂.由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn

关于链表算法需要注意的空指针异常

在学习数据结构时,相信不少笔友们会被指针这个知识点困住,小小的一个设计到指针的算法可能会耗费你很多时间才可能完善,归咎到底就是没有注意到空指针的发生.本人在下面举个栗子: 已知一个带头节点的单链表L,其节点如下定义: 1 template <typename T> 2 struct LinkList{ 3 T data; 4 LinkList<T> * head; 5 } 现在设计一个算法,查找最后一个值为e的节点的逻辑结构:呵呵,看着挺简单的吧,只需要遍历一遍链表即可查找到结果,

LeetCode链表相加-Python&lt;二&gt;

上一篇:LeetCode两数之和-Python<一> 题目:https://leetcode-cn.com/problems/add-two-numbers/description/ 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8