博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Add Two Numbers 两个数字相加
阅读量:6869 次
发布时间:2019-06-26

本文共 1678 字,大约阅读时间需要 5 分钟。

 

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

 

这道并不是什么难题,算法很简单,链表的数据类型也不难。就是建立一个新链表,然后把输入的两个链表从头往后撸,每两个相加,添加一个新节点到新链表后面,就是要处理下进位问题。还有就是最高位的进位问题要最后特殊处理一下。代码如下:

 

C++ 解法: 

class Solution {public:    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {        ListNode *res = new ListNode(-1);        ListNode *cur = res;        int carry = 0;        while (l1 || l2) {            int n1 = l1 ? l1->val : 0;            int n2 = l2 ? l2->val : 0;            int sum = n1 + n2 + carry;            carry = sum / 10;            cur->next = new ListNode(sum % 10);            cur = cur->next;            if (l1) l1 = l1->next;            if (l2) l2 = l2->next;        }        if (carry) cur->next = new ListNode(1);        return res->next;    }};

 

Java 解法:

public class Solution {    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        ListNode dummy = new ListNode(-1);        ListNode cur = dummy;        int carry = 0;        while (l1 != null || l2 != null) {            int d1 = l1 == null ? 0 : l1.val;            int d2 = l2 == null ? 0 : l2.val;            int sum = d1 + d2 + carry;            carry = sum >= 10 ? 1 : 0;            cur.next = new ListNode(sum % 10);            cur = cur.next;            if (l1 != null) l1 = l1.next;            if (l2 != null) l2 = l2.next;        }        if (carry == 1) cur.next = new ListNode(1);        return dummy.next;    }}

 

在CareerCup上的这道题还有个Follow Up,把链表存的数字方向变了,原来是表头存最低位,现在是表头存最高位,请参见我的另一篇博客 。

 

类似题目:

 

转载地址:http://nrbfl.baihongyu.com/

你可能感兴趣的文章
swift class extension 与继承
查看>>
修改socket文件, MySQL启动报错
查看>>
Centos 7 telnet 详解
查看>>
零元学Expression Design 4 - Chapter 6 教你如何在5分钟内做出文字立体感效果
查看>>
ELK+MySQL出现大量重复记录问题处理
查看>>
WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口)
查看>>
随机器构建
查看>>
golang学习笔记 ----读写文件
查看>>
如何将MathType嵌入Word 2016
查看>>
JAVA8 ARRAY、LIST操作 汇【5】)- JAVA8 LAMBDA LIST统计(求和、最大、最小、平均)...
查看>>
通过Nginx反向代理之后客户端验证码session不一致造成无法验证通过的问题解决...
查看>>
[python] PyMouse、PyKeyboard用python操作鼠标和键盘
查看>>
待整理
查看>>
(筆記) DE2與SDRAM相關資料總整理 (SOC) (DE2)
查看>>
(原創) 如何以10進位顯示8位數的七段顯示器? (SOC) (Verilog) (DE2)
查看>>
MetaModelEngine:元模型引擎开发思路
查看>>
STM32对内部Flash的保护措施
查看>>
QT练习4:编写一个查找对话框
查看>>
三道笔试题
查看>>
提升软件开发者生产力的 10 个提示
查看>>