本题是比较基础的链表题。
1.思路
1)构造头部节点
2)记录表头位置
3)边相加,边移位(构造下一个节点,指向下一个节点)
Note:最后return的时候要注意不能把头节点也返回(为了省时间,就没有把多余的节点删除)
2.代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
temp = ListNode(0) #表头节点,temp为操作辅助链表
l3 = temp #记录表头位置,因为temp指向会发生改变
sum = 0 #初始化每一位数字之和
while l1 != None or l2 != None or sum != 0: #添加最后一个条件是为了处理两个链表同时结束并且有进位产生的情况,如果没有最后一个条件,在两个都结束的情况下,最后一次循环不会进行
if l1 != None:
sum += l1.val
l1 = l1.next
if l2 != None:
sum += l2.val
l2 = l2.next
temp.next = ListNode(sum % 10) #开始构造节点,并且存入当前位计算结果
temp = temp.next #移动指针
sum = sum // 10 #进位,更新sum(如果有进位,下一次就在sum = 1基础上进行计算)
return l3.next