/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode Node;
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
int flag = 0;
int tmp = 0;
Node head;/* a dummy node in local, set as a head node, needs return node.next */
Node *rear = &head;
/* if l2 or l1 not NULL or flag!=0, will add node to the list */
while(l1 || l2 || flag){
/* get current value */
tmp = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + flag;
flag = 0;
/* if need carry, set carry flag */
if(tmp >= 10){
flag = 1;
tmp -= 10;
}
/* use nodes of l1 firstly */
if(l1){
l1->val = tmp;
rear->next = l1;
}else if(l2){/* if l1 is NULL, use nodes of l2 */
l2->val = tmp;
rear->next = l2;
}else{ /* if both l1 and l2 are NULL, malloc a node */
Node *node = (Node *)malloc(sizeof(Node));
node->val = tmp;
node->next = NULL;/* set malloc node pointer NULL, remember this, cause always make mistakes here. */
rear->next = node;
}
rear = rear->next;
if(l1)
l1 = l1->next;
if(l2)
l2 = l2->next;
}
return head.next;
}
LeetCode-2-两数相加-C语言
最新推荐文章于 2024-02-21 17:43:54 发布