/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* head = NULL;
struct ListNode* prev;
struct ListNode* current;
int nl1 = 0;
int nl2 = 0;
int sumN = 0;
int prevAddN = 0;
int stop = 0;
while (l1 != NULL || l2 != NULL)
{
current = (struct ListNode*)malloc(sizeof(struct ListNode));//分配指向ListNode结构的一个空间
if (head == NULL)
head = current;
else
prev->next = current;
current->next = NULL;
if (l1 != NULL)
nl1 = l1->val;
else nl1 = 0;
if (l2 != NULL)
nl2 = l2->val;
else nl2 = 0;
sumN = nl1 + nl2;
if ((sumN +prevAddN)<= 9)
{
current->val = sumN + prevAddN;
prevAddN = 0;
}
else {
current->val = (sumN + prevAddN) % 10;
prevAddN = 1;
}
prev = current;
/* if(l1==NULL&&l2==NULL&&prevAddN==1){
current = (struct ListNode*)malloc(sizeof(struct ListNode));//分配指向ListNode结构的一个空间
prev->next = current;
current->next = NULL;
current->val=prevAddN;
prev = current;
return head;
}else{*///先检测是否是空在看是不是最后一排
if (stop == 0 && l1->next != NULL && l2->next != NULL)
{
l1 = l1->next;
l2 = l2->next;
}
else {
if (stop == 1 || l1->next == NULL)
{
if (l2 == NULL && prevAddN == 0) return head;
else if (l2 == NULL && prevAddN == 1) {
current = (struct ListNode*)malloc(sizeof(struct ListNode));//分配指向ListNode结构的一个空间
prev->next = current;
current->next = NULL;
current->val = prevAddN;
prev = current;
return head;
}
l2 = l2->next;
l1 = current->next;
// l2 = current->next;
stop = 1;
}
else if (stop == 2 || l2->next == NULL)
{
if (l1 == NULL && prevAddN == 0) return head;
else if (l1 == NULL && prevAddN == 1) {
current = (struct ListNode*)malloc(sizeof(struct ListNode));//分配指向ListNode结构的一个空间
prev->next = current;
current->next = NULL;
current->val = prevAddN;
prev = current;
return head;
}
l1 = l1->next;
// l1 = current->next;
l2 = current->next;
stop = 2;
}
}
}
if(l1==NULL&&l2==NULL&&prevAddN==1)
{
current = (struct ListNode*)malloc(sizeof(struct ListNode));//分配指向ListNode结构的一个空间
prev->next = current;
current->next = NULL;
current->val = prevAddN;
prev = current;
return head;
}
return head;
}
leetcode 第二题 两数相加 十分笨拙的方法。。。