LeetCode-2-Add Two Nuns(C语言实现)
2017-12-18 03:33
246 查看
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct
ListNode* l1, struct
ListNode* l2) {
int add = 0;
//记录进位
struct ListNode *p, *q;
//设置l1和l2的游标指针
p = l1;
q = l2;
struct ListNode *get, *s, *t;
//设置返回链表的头指针和拼接借口的记录指针
//读取第一位(本题给出链表不附带空的head头节点)
s = (struct ListNode *)malloc(sizeof(struct
ListNode));
s -> next = NULL;
get = s;
s -> val = p ->
val + q -> val;
if(s -> val >
9)
//记录和处理第一位的进位
{
s -> val %=
10;
add = 1;
}
//读取剩余的l1、l2
while(p -> next !=
NULL && q -> next !=
NULL)
{
p = p -> next;
//处理输入链表的记录指针
q = q -> next;
t = (struct
ListNode *)malloc(sizeof(struct
ListNode));
t -> next =
NULL;
t -> val = p ->
val + q -> val + add;
add = 0;
//记录和处理第二位的进位
if(t -> val >
9)
{
t -> val %=
10;
add = 1;
}
s -> next = t;
//处理返回链表的记录指针
s = s -> next;
}
//处理最后一个进位
//当l1没有读完,l2已经读完时
if(p -> next !=
NULL && q -> next ==
NULL)
while(p ->
next != NULL)
{
p = p -> next;
//处理输入链表的记录指针
t = (struct
ListNode *)malloc(sizeof(struct
ListNode));
t -> next =
NULL;
t -> val = p ->
val + add;
add = 0;
//记录和处理第二位的进位
if(t ->
val > 9)
{
t -> val %=
10;
add = 1;
}
s -> next = t;
//处理返回链表的记录指针
s = s -> next;
}
//当l2没有读完,l1已经读完时
if(p -> next ==
NULL && q -> next !=
NULL)
while(q ->
next != NULL)
{
q = q -> next;
//处理输入链表的记录指针
t = (struct
ListNode *)malloc(sizeof(struct
ListNode));
t -> next =
NULL;
t -> val = q ->
val + add;
add = 0;
//记录和处理第二位的进位
if(t ->
val > 9)
{
t -> val %=
10;
add = 1;
}
s -> next = t;
//处理返回链表的记录指针
s = s -> next;
}
//当l1和l2都读完时
if(p -> next ==
NULL && q -> next ==
NULL)
if(add ==
1)
{
t = (struct
ListNode *)malloc(sizeof(struct
ListNode));
t -> next =
NULL;
t -> val = add;
s -> next = t;
}
return get;
}
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct
ListNode* l1, struct
ListNode* l2) {
int add = 0;
//记录进位
struct ListNode *p, *q;
//设置l1和l2的游标指针
p = l1;
q = l2;
struct ListNode *get, *s, *t;
//设置返回链表的头指针和拼接借口的记录指针
//读取第一位(本题给出链表不附带空的head头节点)
s = (struct ListNode *)malloc(sizeof(struct
ListNode));
s -> next = NULL;
get = s;
s -> val = p ->
val + q -> val;
if(s -> val >
9)
//记录和处理第一位的进位
{
s -> val %=
10;
add = 1;
}
//读取剩余的l1、l2
while(p -> next !=
NULL && q -> next !=
NULL)
{
p = p -> next;
//处理输入链表的记录指针
q = q -> next;
t = (struct
ListNode *)malloc(sizeof(struct
ListNode));
t -> next =
NULL;
t -> val = p ->
val + q -> val + add;
add = 0;
//记录和处理第二位的进位
if(t -> val >
9)
{
t -> val %=
10;
add = 1;
}
s -> next = t;
//处理返回链表的记录指针
s = s -> next;
}
//处理最后一个进位
//当l1没有读完,l2已经读完时
if(p -> next !=
NULL && q -> next ==
NULL)
while(p ->
next != NULL)
{
p = p -> next;
//处理输入链表的记录指针
t = (struct
ListNode *)malloc(sizeof(struct
ListNode));
t -> next =
NULL;
t -> val = p ->
val + add;
add = 0;
//记录和处理第二位的进位
if(t ->
val > 9)
{
t -> val %=
10;
add = 1;
}
s -> next = t;
//处理返回链表的记录指针
s = s -> next;
}
//当l2没有读完,l1已经读完时
if(p -> next ==
NULL && q -> next !=
NULL)
while(q ->
next != NULL)
{
q = q -> next;
//处理输入链表的记录指针
t = (struct
ListNode *)malloc(sizeof(struct
ListNode));
t -> next =
NULL;
t -> val = q ->
val + add;
add = 0;
//记录和处理第二位的进位
if(t ->
val > 9)
{
t -> val %=
10;
add = 1;
}
s -> next = t;
//处理返回链表的记录指针
s = s -> next;
}
//当l1和l2都读完时
if(p -> next ==
NULL && q -> next ==
NULL)
if(add ==
1)
{
t = (struct
ListNode *)malloc(sizeof(struct
ListNode));
t -> next =
NULL;
t -> val = add;
s -> next = t;
}
return get;
}
相关文章推荐
- leetcode 2. Add Two Numbers python实现的理解,结点,单链表的应用,大数,进位的问题
- LeetCode-21-Merge Two Sorted Lists(C语言实现)
- [LeetCode][2 Add Two Numbers][medium]Java实现
- 【LeetCode】【Python】【C++】2. Add Two Numbers代码实现
- LeetCode java实现Add Two Numbers
- [Leetcode] Add Two Numbers Python实现 详细讲解
- [LeetCode][2]Add Two Numbers解析 -Java实现
- LeetCode-java实现-T2-Add Two Numbers
- LeetCode 2. Add Two Numbers (C++/python/js实现)
- LeetCode题解(Golang实现)--Add Two Numbers
- LeetCode 之 Add Two Numbers — C 实现
- leetcode 2:Add Two Numbers(C语言)
- [Leetcode]Add Two Numbers 链表实现大数字相加
- LeetCode-1-Two Sum(C语言实现)
- [LeetCode]4 Add Two Numbers(C++,Python实现)
- LeetCode(2) Add Two Numbers实现
- LeetCode-2. Add Two Numbers(链表实现数字相加)
- leetcode 【 Add Two Numbers 】 python 实现
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- Leetcode 2.Add Two Numbers的c语言解决