​LeetCode刷题实战369:给单链表加一

简介: 算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 给单链表加一,我们先来看题面:https://leetcode-cn.com/problems/plus-one-linked-list/

Given a non-negative integer represented as non-empty a singly linked list of digits, plus one to the integer.


You may assume the integer do not contain any leading zero, except the number 0 itself.


The digits are stored such that the most significant digit is at the head of the list.

用一个 非空 单链表来表示一个非负整数,然后将这个整数加一。你可以假设这个整数除了 0 本身,没有任何前导的 0。这个整数的各个数位按照 高位在链表头部、低位在链表尾部 的顺序排列。

示例

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

解题



这是一道linked list题,有几种情况需要考虑,第一种情况正常,末尾不为9的时候直接+1第二种情况,末尾为9的时候要向前进位置,还要判断如果全为9的话要新建一个链表头

/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode plusOne(ListNode head) {
        ListNode newHead = new ListNode(0);
        newHead.next = head;
        ListNode curr = newHead;
        ListNode curr_head = newHead;
        while(curr.next!=null){
            curr = curr.next;
            if(curr.val != 9){
                curr_head = curr;
            }
        }
        if(curr_head == curr){
            curr.val++;
        }else{
            curr_head.val++;
            curr = curr_head;
            while(curr.next != null){
                curr = curr.next;
                curr.val = 0;
            }
        }
        if(newHead.val == 0){
            newHead.next = null;
            return head;
        }else{
            return newHead;
        }
    }
}

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。


目录
打赏
0
0
0
0
23
分享
相关文章
|
6月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
67 1
|
6月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
97 0
Leetcode第21题(合并两个有序链表)
|
24天前
|
【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 23——合并 K 个升序链表的两种解法:优先队列(最小堆)和分治合并。题目要求将多个已排序链表合并为一个升序链表。最小堆方法通过维护节点优先级快速选择最小值,;分治合并则采用归并思想两两合并链表。文章提供了 Go 语言实现代码,并对比分析两种方法的适用场景,帮助读者深入理解链表操作与算法设计。
70 10
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
105 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
151 1
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
6月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
68 0
LeetCode第二十四题(两两交换链表中的节点)
|
6月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
71 0
Leetcode第十九题(删除链表的倒数第N个节点)
链表经典操作与实战
文章深入探讨了链表的基本概念、分类和经典操作,通过LeetCode上的实战题目展示了如何应用虚拟头节点、双指针法、定位前驱节点等技巧来解决链表相关问题,并强调了算法在软件开发中的重要性。
链表经典操作与实战
|
6月前
|
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
151 0

热门文章

最新文章

下一篇
oss创建bucket
目录
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等