leetcode_369 给单链表加一

132 阅读1分钟

要求

用一个 非空 单链表来表示一个非负整数,然后将这个整数加一。

你可以假设这个整数除了 0 本身,没有任何前导的 0。

这个整数的各个数位按照 高位在链表头部、低位在链表尾部 的顺序排列。

示例:

输入: [1,2,3]
输出: [1,2,4]

核心代码

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
        
class Solution:
    def reverseList(self,head):
        if head is None or head.next is None:
            return head
        tmp = self.reverseList(head.next)
        head.next.next = head
        head.next = None
        return tmp

    def plusOne(self, head: ListNode) -> ListNode:
        head = self.reverseList(head)
        tmp = head
        head.val += 1
        while head.val > 9:
            head.val -= 10
            if head.next:
                head.next.val += 1
                head = head.next
            else:
                head.next = ListNode(1)
                break
        return self.reverseList(tmp)

image.png

解题思路:我们实现链表中的数字+1的功能,我们首先先将链表反转,因为这样在进位计算的时候,直接next比较方便,当最后一位还要向前进位的时候,我们在结尾拼接一个新的节点即可.