Leetcode刷题2——链表相加求和

  1. Add Two Numbers
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. 两数相加
【Leetcode刷题2——链表相加求和】给你两个链表表示两个非负数。各位数字是以倒序方式存在每个结点上的,每个结点保存一个数字。把这两个数相加并且以同样的形式返回一个表示和的链表。
思路:
(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#去掉空的头结点

    推荐阅读