Add Two Numbers Leetcode

来源:互联网 发布:李白 知乎 编辑:程序博客网 时间:2024/06/06 03:52

题意:You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

总结:

1.注意if(l1 != NULL) l1 = l1->next;赋值之前先检查


/** * 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 *resHeader = new ListNode(0);<span style="white-space:pre"></span>ListNode *resTail;<span style="white-space:pre"></span>ListNode *ret;<span style="white-space:pre"></span>carry = 0;<span style="white-space:pre"></span>resTail = resHeader;<span style="white-space:pre"></span>while(true)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>    ret = add2dgt(l1,l2);<span style="white-space:pre"></span>    if(ret == NULL)<span style="white-space:pre"></span>        break;<span style="white-space:pre"></span>resTail->next = ret;<span style="white-space:pre"></span>resTail = resTail->next;<span style="white-space:pre"></span>if(l1 != NULL) l1 = l1->next;<span style="white-space:pre"></span>if(l2 != NULL) l2 = l2->next;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>return resHeader->next;      }int carry = 0;//进位值//将两个结点相加,并产生一个进位ListNode * add2dgt(ListNode *a,ListNode *b){<span style="white-space:pre"></span>ListNode *ret=NULL;<span style="white-space:pre"></span>int temp=0;<span style="white-space:pre"></span>if( a!=NULL && b!=NULL ){<span style="white-space:pre"></span>temp = a->val + b->val + carry;<span style="white-space:pre"></span>carry = temp/10;<span style="white-space:pre"></span>ret = new ListNode(temp%10);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>else if(a==NULL && b!=NULL){<span style="white-space:pre"></span>temp = b->val + carry;<span style="white-space:pre"></span>carry = temp/10;<span style="white-space:pre"></span>ret = new ListNode(temp%10);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>else if( b==NULL && a!=NULL){<span style="white-space:pre"></span>temp = a->val + carry;<span style="white-space:pre"></span>carry = temp/10;<span style="white-space:pre"></span>ret = new ListNode(temp%10);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>else if( carry!=0 ){<span style="white-space:pre"></span>temp = carry;<span style="white-space:pre"></span>carry = temp/10;<span style="white-space:pre"></span>ret = new ListNode(temp%10);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>return ret;}};




0 0