📅  最后修改于: 2023-12-03 14:53:42.442000             🧑  作者: Mango
在软件开发中,很常见的一种数据结构是链表。而对于整数的表示,我们可以将其拆分成多个节点以形成一个链表。例如,数字 123 可以表示为一个链表 1 -> 2 -> 3。但是如果我们需要将一个整数加1,那么涉及到加法进位的问题,这时就需要考虑链表加1的算法实现。
下面我们就来介绍如何在链表表示的数字中将1加上。
假设给定的表示为链表的数字是 $n$。最右边的节点表示最低位,每个节点只保存一个数字。将该数加 $1$ 后,可能会出现进位,因此我们需要从最低位开始依次判断是否需要进位,直到遍历到最高位为止。
以下是 Java 语言实现的代码示例:
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
public ListNode plusOne(ListNode head) {
ListNode dummy = new ListNode(0); // 头结点
dummy.next = head;
ListNode p = dummy, q = dummy;
while (p.next != null) {
p = p.next;
if (p.val != 9) q = p;
}
if (p.val != 9) {
p.val++; // 不需要进位
} else {
q.val++;
q = q.next;
while (q != null) {
q.val = 0;
q = q.next;
}
}
if (dummy.val == 0) return dummy.next; // 不需要增加节点
return dummy; // 需要增加节点
}
}
链表加1的算法实现虽然看起来比较简单,但也需要注意细节。需要从低位到高位遍历链表,并考虑进位的问题。实现时最好增加一个头结点方便处理。在实际开发中,我们还需要注意对于特殊情况的处理,如链表为空、链表中所有节点的值都为9等情况。