/**
* 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;
}