369 给单链表加1-中等
题目:
给定一个用链表表示的非负整数, 然后将这个整数 再加上 1 。
这些数字的存储是这样的:最高位有效的数字位于链表的首位 head
。
示例 1:
输入: head = [1,2,3] 输出: [1,2,4]
示例 2:
输入: head = [0] 输出: [1]
解题思路
因为低位在单链表的尾部,对低位加1不是很方便,所以需要先将链表反转,加1计算后,在反转一次即可。
// date 2024/01/12
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func plusOne(head *ListNode) *ListNode {
if head == nil {
return head
}
l2 := reverseList(head)
carry := 1
cur := l2
prev := l2
for cur != nil {
after := cur.Next
temp := cur.Val + carry
cur.Val = temp % 10
carry = temp / 10
prev = cur
cur = after
}
if carry == 1 {
prev.Next = &ListNode{Val: 1}
}
l3 := reverseList(l2)
return l3
}
func reverseList(head *ListNode) *ListNode {
var tail *ListNode
cur := head
for cur != nil {
after := cur.Next
cur.Next = tail
tail = cur
cur = after
}
return tail
}
最后更新于