题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head1 ListNode类
# @param head2 ListNode类
# @return ListNode类
#
class Solution:
def addInList(self , head1: ListNode, head2: ListNode) -> ListNode:
# write code here
# 思路:反转链表,再逐个相加
# 反转链表思路:将后续链表逐个反转
if head1 is None:
return head2
if head2 is None:
return head1
head1 = self.reverse(head1)
head2 = self.reverse(head2)
head = ListNode(-1)
cur = head
temp = 0
while head1 or head2:
val = temp
if head1:
val = val + head1.val
head1 = head1.next
if head2:
val = val+head2.val
head2 = head2.next
temp = (int)(val / 10)
cur.next = ListNode(val % 10)
cur = cur.next
if temp > 0:
cur.next = ListNode(temp)
return self.reverse(head.next)
def reverse(self, head: ListNode) -> ListNode:
if head is None:
return head
new_head = None
while head:
# 存储当前节点的下一个节点备用
temp = head.next
# 将当前节点的下一个节点指向新链表,或者说是指向前一个节点
head.next = new_head
# 将当前节点赋给新链表
new_head = head
# 将下一个节点赋给原来的链表,继续往下走
head = temp
return new_head
注意点:进位数需转换为int类型