题目地址:
https://leetcode.com/problems/plus-one-linked-list/
给定一个链表,表示十进制正整数。返回这个正整数加 1 1 1后的链表表示。
翻转后模拟十进制加法即可,最后再翻转回来。代码如下:
public class Solution {
public ListNode plusOne(ListNode head) {
if (head == null) {
return head;
}
ListNode newHead = reverse(head), dummy = new ListNode(0), prev = dummy;
dummy.next = newHead;
prev.next.val += 1;
int carry = 0;
while (prev.next != null) {
prev.next.val += carry;
carry = prev.next.val / 10;
prev.next.val %= 10;
prev = prev.next;
}
// 如果最高位有进位,需要补上一个node
if (carry == 1) {
prev.next = new ListNode(1);
}
// 最后翻回来再返回
return reverse(dummy.next);
}
private ListNode reverse(ListNode head) {
ListNode prev = null;
while (head != null) {
ListNode tmp = head.next;
head.next = prev;
prev = head;
head = tmp;
}
return prev;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。