/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode Node;
/* 反转链表 */
Node *reverse(Node *head){
Node node;
node.next = NULL;
Node *last = NULL;
while(head){
last = head;
head = head->next;
last->next = node.next;
node.next = last;
}
return node.next;
}
/* 链表相加 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
Node node;/* 创建一个node.next为头节点的链表,将新的节点添加到该节点,返回该链表的反转链表即可 */
node.next = NULL;
Node *rear = &node;
int flag = 0;
int tmp = 0;
Node *last = NULL;
l1 = reverse(l1);
l2 = reverse(l2);
while(l1 || l2 || flag){
tmp = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) +flag;
flag = 0;
if(tmp >= 10){
tmp -= 10;
flag = 1;
}
last = l1 ? l1 : l2;
if(!last){
last = (Node *)malloc(sizeof(Node));
}
last->val = tmp;
if(l1)
l1 = l1->next;
if(l2)
l2 = l2->next;
rear->next = last;
rear = rear->next;
rear->next = NULL;
}
return reverse(node.next);
}