2. Add Two Numbers

来源:互联网 发布:sql删除语句 编辑:程序博客网 时间:2024/06/16 22:36
/*本算法要考虑三种情况,第一种就是两个链表长度相等,但是相加后最后一个会产生进位,第二种就是相加后不产生进位,第三种就是链表长度不相等。*/
/** * 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;//q记住当前的结点的前驱,以便删除当前结点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;}elsep->val = flag;return head;} }     };

0 0
原创粉丝点击