热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[LeetCode]369.PlusOneLinkedList链表加一运算

Givenanon-negativenumberrepresentedasasinglylinkedlistofdigits,plusonetothenumber.Thedigit

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

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

Example:

Input:
1->2->3Output:
1->2->4

给一个节点为非负数的链表,链表头是高位,进行加1运算。

解法: 由于链表无法通过坐标来直接访问元素,从链尾开始操作就很麻烦。如果链尾是高位,进行加1运算就方便了,所以先把链表翻转一下,进行加1运算后,再把链表翻转回来即可。

Java:

public ListNode plusOne(ListNode head) {ListNode h2 &#61; reverse(head);ListNode p&#61;h2;while(p!&#61;null){if(p.val&#43;1<&#61;9){p.val&#61;p.val&#43;1;break;}else{p.val&#61;0;if(p.next&#61;&#61;null){p.next &#61; new ListNode(1);break;}p&#61;p.next;}}return reverse(h2);
}public ListNode reverse(ListNode head){if(head&#61;&#61;null||head.next&#61;&#61;null)return head;ListNode p1&#61;head;ListNode p2&#61;p1.next;while(p2!&#61;null){ListNode t &#61; p2.next;p2.next&#61;p1;p1&#61;p2;p2&#61;t;}head.next&#61;null;return p1;
}  

Python:

# Time: O(n)
# Space: O(1)# Definition for singly-linked list.
class ListNode(object):def __init__(self, x):self.val &#61; xself.next &#61; None# Two pointers solution.
class Solution(object):def plusOne(self, head):""":type head: ListNode:rtype: ListNode"""if not head:return Nonedummy &#61; ListNode(0)dummy.next &#61; headleft, right &#61; dummy, headwhile right.next:if right.val !&#61; 9:left &#61; rightright &#61; right.nextif right.val !&#61; 9:right.val &#43;&#61; 1else:left.val &#43;&#61; 1right &#61; left.nextwhile right:right.val &#61; 0right &#61; right.nextreturn dummy if dummy.val else dummy.next

Python:

# Time: O(n)
# Space: O(1)
class Solution2(object):def plusOne(self, head):""":type head: ListNode:rtype: ListNode"""def reverseList(head):dummy &#61; ListNode(0)curr &#61; headwhile curr:dummy.next, curr.next, curr &#61; curr, dummy.next, curr.nextreturn dummy.nextrev_head &#61; reverseList(head)curr, carry &#61; rev_head, 1while curr and carry:curr.val &#43;&#61; carrycarry &#61; curr.val / 10curr.val %&#61; 10if carry and curr.next is None:curr.next &#61; ListNode(0)curr &#61; curr.nextreturn reverseList(rev_head)  

C&#43;&#43;:

class Solution {
public:ListNode* plusOne(ListNode* head) {if (!head) return head;ListNode *rev_head &#61; reverse(head), *cur &#61; rev_head, *pre &#61; cur;int carry &#61; 1;while (cur) {pre &#61; cur;int t &#61; cur->val &#43; carry;cur->val &#61; t % 10;carry &#61; t / 10;if (carry &#61;&#61; 0) break;cur &#61; cur->next;}if (carry) pre->next &#61; new ListNode(1);return reverse(rev_head);}ListNode* reverse(ListNode *head) {if (!head) return head;ListNode *dummy &#61; new ListNode(-1), *cur &#61; head;dummy->next &#61; head;while (cur->next) {ListNode *t &#61; cur->next;cur->next &#61; t->next;t->next &#61; dummy->next;dummy->next &#61; t;}return dummy->next;}
};

C&#43;&#43;: Recursive

class Solution {
public:ListNode* plusOne(ListNode* head) {if (!head) return head;int carry &#61; helper(head);if (carry &#61;&#61; 1) {ListNode *res &#61; new ListNode(1);res->next &#61; head;return res;}return head;}int helper(ListNode *node) {if (!node) return 1;int carry &#61; helper(node->next);int sum &#61; node->val &#43; carry;node->val &#61; sum % 10;return sum / 10;}
};

    

 

类似题目&#xff1a;

[LeetCode] 66. Plus One 加一

[LeetCode] 67. Add Binary 二进制数相加 

All LeetCode Questions List 题目汇总

 


转:https://www.cnblogs.com/lightwindy/p/9649781.html



推荐阅读
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 文章目录前言pandas主要分为如下几个阶段:表格数据操作:增删改查实现多个表格的处理数据清洗操作:缺失值、重复值、异常值、数据标准化、数 ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
author-avatar
手机用户2502877397
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有