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

 /*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. [linux]segvcatch简单使用

    https://code.google.com/p/segvcatch/ This is a crossplatform C++ library designed to convert a hardw ...

  2. Android仿微信界面--使用Fragment实现(慕课网笔记)

    1 效果图  这里我们没有实现滑动切换view的功能 2 具体实现: 2.1 布局文件:top.xml, bottom.xml,tab01.xml,tab02.xml,tab03.xml,tab04. ...

  3. mininet 中图形化界面的安装

    just run a GUI in VM console window First, log in to the VM in its console window (i.e. type directl ...

  4. Struts2 三、指定Struts2处理的请求后缀

    Action的请求通常情况下默认为以.action结尾,例如:http://localhost:9000/Struts2/hello/helloAction_sayHello.action    .a ...

  5. AngularJS初始用之 中间件 connect .static 静态文件不能找到

    学习心得,软件更新太快,学习不能照书本. 在学习搭建Nodejs服务器时,掉坑了啦,太坑了,对于什么都不知道的初学者,开门就是坑...,怎么坚持学下去... 还好,现在的世界很大,如果你发现自己不是犯 ...

  6. Java面试题之Class.forName的作用

    按参数中指定的字符串形式的类名去搜索并加载相应的类,如果该类字节码已经被加载过,则返回代表该字节码的Class实例对象,否则,按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类, ...

  7. 《think in python》学习-4

    think in python -4 接口设计: 本章引入了一个实例 来讲解接口方面的知识. 准备工作: 下载swampy模块,从地址下载,并安装,安装信息可以从网页上查看. swampy模块 提供各 ...

  8. sqlserver事务与回滚

    如果要在Production执行数据改动必须小心,可以使用事务提前验证一下自己写的SQL是不是你期望的.尤其是Update的where 条件有问题的话,跟新的记录就会超出预期的范围.如下面的语句,一着 ...

  9. OC-方法

    1.类声明 @interface Person : NSObject { @public int _height; int _weight; int _age; } // 如果你不想每次使用方法都需要 ...

  10. Phalcon 性能最高的php框架没有之一

    最近有个朋友说他们现在在用Phalcon框架开发项目,明显感觉性能有很大的提升,所有着手学习下这个高性能框架,网上是这样说的“虽然以C语言编写达到较高的效能,但相对的一项缺点就是在服务器上必须拥有管理 ...