/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {    ListNode *head = new ListNode(0);	ListNode *p = head,*q=NULL;		int num = 0;	int flag = 0;	while (l1!= NULL||l2!= NULL)	{		if (l1 != NULL && l2 != NULL)		{			int sum = l1->val + l2->val + flag;			 flag=sum/10;			int Lsum = sum % 10;			p->val = Lsum;			q = p;			p->next = new ListNode(0);			p = p->next;			l1 = l1->next;			l2 = l2->next;		}		else if (l1 == NULL&&l2 != NULL)		{			int sum = l2->val + flag;			 flag=sum/10;			int Lsum = sum % 10;			p->val = Lsum;			q = p;			p->next = new ListNode(0);			p = p->next;			l2=l2->next;		}		else		{			int sum = l1->val + flag;			 flag=sum/10;			int Lsum = sum % 10;			p->val = Lsum;			q = p;			p->next = new ListNode(0);			p = p->next;			l1=l1->next;		}	}	if (l1 == NULL&&l2 == NULL)	{		if (flag == 0)		{			delete p;			q->next = NULL;		}					else			p->val = flag;		return head;	} }     };