系统题目给出的l1, l2为不带头结点的链表。我开始用的是带头结点的链表 。。。代码还需改进。。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p, *q, *s, *r, *d;
int a, b;
s = (struct ListNode*) malloc(sizeof(struct ListNode));
s->next = NULL;
r = s;
s->val = l1->val + l2->val;
p = l1->next;
q = l2->next;
while(q!=NULL&&p!=NULL){
d = (struct ListNode*) malloc(sizeof(struct ListNode));
d->next = NULL;
d->val = q->val + p->val;
r->next = d;
r = r->next;
p = p->next;
q = q->next;
}
if(p!= NULL)
r->next = p;
if(q!= NULL)
r->next = q;
r = s;
while(r!= NULL){
if(r->val>9){
a = r->val / 10;
b = r->val % 10;
r->val = b;
if(r->next!=NULL){
r->next->val = r->next->val + a;
}else{
d = (struct ListNode*) malloc(sizeof(struct ListNode));
d->next = NULL;
d->val = a;
r->next = d;
}
}
r = r->next;
}
return s;
}