这个题解的整体思路是首先将链表中的数字转换成字符串,然后将这个字符串表示的整数翻倍。具体步骤如下:1. 遍历链表,将链表中的数值拼接成一个完整的数字字符串。2. 从字符串的最后一个字符(即最低位)开始,每个字符代表的数字都翻倍,并处理进位。3. 如果最高位处理完后还有进位,则将进位添加到结果字符串的最前面。4. 将得到的翻倍后的字符串转换回链表形式。
时间复杂度: O(n)
空间复杂度: O(n)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def doubleIt(self, head: Optional[ListNode]) -> Optional[ListNode]:
s = ""
root = head
while root:
s += str(root.val) # 将链表数字拼接为字符串
root = root.next
ss = ""
val = 0 # 初始化进位为0
for i in range(1,len(s)+1):
num = int(s[-i]) # 从最低位开始处理
a = num * 2 + val # 翻倍并加上进位
val,num = divmod(a,10) # 更新进位和当前位
ss = str(num) + ss # 将当前位添加到结果字符串
if val:
ss = str(val) + ss # 处理最后的进位
node = ListNode(int(ss[0])) # 创建新链表的头节点
head1 = node
for i in range(1,len(ss)):
node.next = ListNode(int(ss[i])) # 依次创建链表的后续节点
node = node.next
return head1