- Add Two Numbers
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
- 两数相加
思路:
(1)新建空的链表用于储存相加结果
(2)然后尾结点从头结点开始向后不断生成新的结点。
(3)遍历两条链公共部分,每次相加相应位数字和进位,分配到结果的链表中。
(4)公共部分遍历完后再确定长的链表剩余的部分,同样的方式遍历完。
# Definition for singly-linked list.
# class ListNode(object):
#def __init__(self, x):
#self.val = x
#self.next = Noneclass Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
head, p1, p2= ListNode(0), l1, l2#空的头结点
tail = head #尾结点
carry = 0;
#进位
while p1 and p2:#遍历两条链公共部分
num = p1.val + p2.val + carry
if num > 9:
num -= 10
carry = 1
else:
carry = 0
# 添加结点
tail.next = ListNode(num)
tail = tail.next
# 移动两条链
p1 = p1.next
p2 = p2.next
# 取两条链长的那条剩下的部分
if p2: p1 = p2
while p1:
num = p1.val + carry
if (num > 9):
num -= 10
carry = 1
else:
carry = 0tail.next = ListNode(num)
tail = tail.nextp1 = p1.next
# 如果最后还有进位,再分配一个结点
if carry:
tail.next = ListNode(1)
tail = tail.next
tail.next = None# 将链表收尾
return head.next#去掉空的头结点
推荐阅读
- 数据结构与算法|【算法】力扣第 266场周赛
- leetcode|今天开始记录自己的力扣之路
- Python|Python 每日一练 二分查找 搜索旋转排序数组 详解
- 【LeetCode】28.实现strstr() (KMP超详细讲解,sunday解法等五种方法,java实现)
- LeetCode-35-搜索插入位置-C语言
- leetcode python28.实现strStr()35. 搜索插入位置
- Leetcode Permutation I & II
- python|leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法
- LeetCode 28 Implement strStr() (C,C++,Java,Python)
- Python|Python Leetcode(665.非递减数列)