第一版代码(很挫很罗嗦,不过是第一次做,记录一下成长的脚步!继续努力!)

 /*struct ListNode {
int val;
struct ListNode *next;
};*/ typedef struct ListNode ListNode; struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
ListNode *result = (ListNode *)malloc(sizeof(ListNode));
result->next = NULL;
ListNode *now = result; ListNode *p1 = l1;
ListNode *p2 = l2;
int carry = ; while(p1&&p2)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p1->val + p2->val + carry;
carry = r/;
p->val = r%;
now->next = p;
now = now->next;
p1 = p1->next;
p2 = p2->next;
} while(p1)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p1->val + carry;
carry = r/;
p->val = r%;
now->next = p;
now = now->next;
p1 = p1->next;
} while(p2)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p2->val + carry;
carry = r/;
p->val = r%;
now->next = p;
now = now->next;
p2 = p2->next;
}
if(carry)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
p->val = carry;
now->next = p;
now = now->next;
} return result->next; }

要注意返回的内容必须符合题目要求,一开始我直接返回了result,但是leetcode测试的时候会把空的头结点也输出,不符合题目要求。

要全面考虑问题,这题的特殊情况主要体现在进位部分,如999+1这种情况,还有就是两个数的位数可能会不同。

可以使用条件操作符对代码进行简化,简化版如下:

 void addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
ListNode *result = (ListNode *)malloc(sizeof(ListNode));
result->next = NULL;
ListNode *now = result; ListNode *p1 = l1;
ListNode *p2 = l2;
int carry = ; while(p1&&p2)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p1->val + p2->val + carry;
carry = r/; //进位
p->val = r%;
now->next = p; //插入到result链表中
now = now->next;
p1 = p1->next;
p2 = p2->next;
} ListNode *p3 = p1?p1:p2;
while(p3)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p3->val + carry;
carry = r/; //进位
p->val = r%;
now->next = p; //插入到result链表中
now = now->next;
p3 = p3->next;
} if(carry)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
p->val = carry;
now->next = p; //插入到result链表中
now = now->next;
} Print(result->next); }

【待补充C++版本。。。】

链表-Add Two Numbers的更多相关文章

  1. Add Two Numbers - C++链表操作

    题目意思很简单,两个链表分别表示两个数,将两个数相加的结果存入一个新的链表中. 思路同样很简单:两个链表如果一样长,对应位置相加,如果某一个链表多了,则根据加的结果有无进位继续处理,全部结束后要考虑会 ...

  2. LeetCode 2. add two numbers && 单链表

    add two numbers 看题一脸懵逼,看中文都很懵逼,链表怎么实现的,点了debug才看到一些代码 改一下,使本地可以跑起来 # Definition for singly-linked li ...

  3. 链表求和12 · Add Two Numbers

    反向存储,从左往右加 [抄题]: 你有两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和.给 ...

  4. LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表

    题意 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...

  5. [LeetCode] Add Two Numbers II 两个数字相加之二

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

  6. [LeetCode] Add Two Numbers 两个数字相加

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  7. [CareerCup] 2.5 Add Two Numbers 两个数字相加

    2.5 You have two numbers represented by a linked list, where each node contains a single digit. The ...

  8. No.002 Add Two Numbers

    Add Two Numbers Total Accepted: 160702 Total Submissions: 664770 Difficulty: Medium You are given tw ...

  9. leetcode 第二题Add Two Numbers java

    链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...

随机推荐

  1. struts2笔记09-动态方法调用

    1.action配置 <action name="testDynamic" class="com.test.actions.TestAction"> ...

  2. Flask中endpoint的理解

    在flask框架中,我们经常会遇到endpoint这个东西,最开始也没法理解这个到底是做什么的.最近正好在研究Flask的源码,也就顺带了解了一下这个endpoint 首先,我们看一个例子: @app ...

  3. JavaScript代码编写尝试使用Vanilla JS 或者Jquery插件

    From Here: http://vanilla-js.com/ Vanilla JS is a fast, lightweight, cross-platform frameworkfor bui ...

  4. php的stdClass类

    在PHP内核进行模块初始化操作时会自动加载这个函数, 这样,stdClass类的注册操作也就会被执行了.stdClass类是一个没有成员变量也没有成员方法的类. 它的所有的魔术方法,父类.接口等在初始 ...

  5. 利用js_API 运行对html文档元素的属性的CRUD操作

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. CLR via C# 阅读笔记

    1.char在C#中为16位Unicode字符:int 映射到System.Int32;long映射到System.Int64. 2.重载时C#不考虑返回值,而CLR允许返回值不同,方法名和参数相同的 ...

  7. 2014.12.01 B/S之windows8.1下安装IIS

    1.打开 控制面板——程序——程序和功能——启用或关闭windows功能 2.找到Internet信息服务         3.等待安装完毕即可 4.控制面板——系统和安全——管理工具——Intern ...

  8. ORACLE EBS R12 FOR LINUX 开机后如何启动数据库、应用脚本[Z]

    在Linux中安裝EBS  R12後, EBS關閉與啟動的程序為: 1. 關閉EBS - 先關閉Applications Server $ cd /d01/oracle/VIS/inst/apps/V ...

  9. Linux学习netstat

    netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP ...

  10. Linux软连接与硬连接 .

    http://blog.csdn.net/ningxinghai/article/details/7342338 Linux的软连接相当于window系统的快捷方式,如我们桌面的QQ等. 硬连接相当于 ...