📜  从表示为链表的数字中减去 1(1)

📅  最后修改于: 2023-12-03 15:06:38.710000             🧑  作者: Mango

从表示为链表的数字中减去 1

在算法题中,有时候会遇到一些将数字表示为链表的问题。比如将一个整数表示为单向链表,每个节点表示数字的一位,节点的值是 0 到 9。

这道题目要解决的问题是:将这个链表表示的数字减去 1,然后将结果表示为链表。

思路

我们可以从链表的最后一位开始倒序遍历,将该位的值减去 1。如果这个节点的值减去 1 后为负数,则将该节点的值设为 9 并向前进位。如果遇到了一个节点的值不为 0,那么就不需要再向前进位了,直接退出遍历。

代码实现

下面是使用 Python 语言实现的链表减 1 的代码。其中 ListNode 类是链表节点的定义。

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def minusOne(head: ListNode) -> ListNode:
    if not head:
        return head

    # 反转链表
    prev = None
    cur = head
    while cur:
        nxt = cur.next
        cur.next = prev
        prev = cur
        cur = nxt

    # 从链表末尾开始遍历
    cur = prev
    cur.val -= 1
    while cur.val < 0:
        cur.val += 10
        if not cur.next:
            cur.next = ListNode(0)
        cur.next.val -= 1
        cur = cur.next

    # 反转链表
    prev = None
    cur = cur
    while cur:
        nxt = cur.next
        cur.next = prev
        prev = cur
        cur = nxt

    return prev if prev.val else prev.next
总结

本题中,我们首先将链表反转,这是因为从链表末尾开始遍历更方便。在遍历的过程中,我们需要注意进位的处理。最后,再将链表反转回来即可。

除了 Python 的实现方式,在其他编程语言中,我们也可以使用栈来实现对链表数字的遍历。