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

 /*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. 不调用库函数实现 strCpy

    实现函数时,首先要弄清楚特殊情况,边界条件要搞清. char* strCpy(char* src,char* des){ //判断指针是否为空 if(NULL==src||NULL == des) r ...

  2. 取PE文件的引入表和导出表

    直接上代码(这里列出C++和Delphi的代码),Delphi代码中包含导入及导出文件和函数列表,PE结构可参阅资料,很多很详细,需要注意的是,本例中是映射到内存,不是通过PE装载器装入的,所以对于节 ...

  3. getBoundingClientRect()来获取页面元素的位置”

    getBoundingClientRect()来获取页面元素的位置” 获取的是一个对象; 延伸阅读; https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA== ...

  4. S3C2440实现wifi、3G上网和迷你无线路由的制作(一)

    S3C2440实现wifi.3G上网和迷你无线路由的制作 fulinux 凌云实验室 本文将通过ARM.linux平台,借助RT2070/RT3070芯片的无线模块(或使用RT2070/RT3070芯 ...

  5. C# System.Guid.NewGuid() 【转】

    概念 GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算 ...

  6. 折叠Collapse插件

    实例 折叠(Collapse)插件可以很容易地让页面区域折叠起来.无论您用它来创建折叠导航还是内容面板,它都允许很多内容选项. .collapse 隐藏内容. .collapse.in 显示内容. . ...

  7. Maven 搭建与my-app项目测试

    前提条件,安装jdk1.6及以上版本,并配置JAVA_HOME 首先,下载Maven3.2.2,附下载地址:http://mirror.bit.edu.cn/apache/maven/maven-3/ ...

  8. EC读书笔记系列之15:条款32、33、34

    条款32 确保你的public继承塑模出is-a关系 记住: ★public继承意味着is-a.适用于base class身上的每一件事情一定也适用于derived class身上,∵每一个deriv ...

  9. 在不同编程语言中对Unix时间戳进行转换(Unix timestamp)

    最近用到unix时间转换在mysql和.net中的应用.将此资料保存在博客中. 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript ...

  10. mysql学习(四)-字段类型

    mysql数据类型: 数值型: 整形:int 浮点型:float double decimal:定点型 日期: date  '2012-01-02' time '10:01:01' datetime ...