链表-Add Two Numbers

第一版代码(很挫很罗嗦,不过是第一次做,记录一下成长的脚步!继续努力!)
/*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的更多相关文章
- Add Two Numbers - C++链表操作
题目意思很简单,两个链表分别表示两个数,将两个数相加的结果存入一个新的链表中. 思路同样很简单:两个链表如果一样长,对应位置相加,如果某一个链表多了,则根据加的结果有无进位继续处理,全部结束后要考虑会 ...
- LeetCode 2. add two numbers && 单链表
add two numbers 看题一脸懵逼,看中文都很懵逼,链表怎么实现的,点了debug才看到一些代码 改一下,使本地可以跑起来 # Definition for singly-linked li ...
- 链表求和12 · Add Two Numbers
反向存储,从左往右加 [抄题]: 你有两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和.给 ...
- LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表
题意 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...
- [LeetCode] Add Two Numbers II 两个数字相加之二
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- [LeetCode] Add Two Numbers 两个数字相加
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- [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 ...
- No.002 Add Two Numbers
Add Two Numbers Total Accepted: 160702 Total Submissions: 664770 Difficulty: Medium You are given tw ...
- leetcode 第二题Add Two Numbers java
链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...
随机推荐
- struts2笔记09-动态方法调用
1.action配置 <action name="testDynamic" class="com.test.actions.TestAction"> ...
- Flask中endpoint的理解
在flask框架中,我们经常会遇到endpoint这个东西,最开始也没法理解这个到底是做什么的.最近正好在研究Flask的源码,也就顺带了解了一下这个endpoint 首先,我们看一个例子: @app ...
- JavaScript代码编写尝试使用Vanilla JS 或者Jquery插件
From Here: http://vanilla-js.com/ Vanilla JS is a fast, lightweight, cross-platform frameworkfor bui ...
- php的stdClass类
在PHP内核进行模块初始化操作时会自动加载这个函数, 这样,stdClass类的注册操作也就会被执行了.stdClass类是一个没有成员变量也没有成员方法的类. 它的所有的魔术方法,父类.接口等在初始 ...
- 利用js_API 运行对html文档元素的属性的CRUD操作
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- CLR via C# 阅读笔记
1.char在C#中为16位Unicode字符:int 映射到System.Int32;long映射到System.Int64. 2.重载时C#不考虑返回值,而CLR允许返回值不同,方法名和参数相同的 ...
- 2014.12.01 B/S之windows8.1下安装IIS
1.打开 控制面板——程序——程序和功能——启用或关闭windows功能 2.找到Internet信息服务 3.等待安装完毕即可 4.控制面板——系统和安全——管理工具——Intern ...
- ORACLE EBS R12 FOR LINUX 开机后如何启动数据库、应用脚本[Z]
在Linux中安裝EBS R12後, EBS關閉與啟動的程序為: 1. 關閉EBS - 先關閉Applications Server $ cd /d01/oracle/VIS/inst/apps/V ...
- Linux学习netstat
netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP ...
- Linux软连接与硬连接 .
http://blog.csdn.net/ningxinghai/article/details/7342338 Linux的软连接相当于window系统的快捷方式,如我们桌面的QQ等. 硬连接相当于 ...