把链表构成的两个数相加。
/** * 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) { int c=0; ListNode pre=ListNode(0); ListNode *p=⪯ while(l1||l2||c){ if (l1) {c+=l1->val;l1=l1->next;} if (l2) {c+=l2->val;l2=l2->next;} p->next= new ListNode(c%10); c=c/10; p=p->next; } return pre.next; } };
思路:
一开始想到边读取 l1 l2 边计算,但是考虑到如果两个数长度不一的时候,如 1+111 ,所以改成读取转换成int再相加再转化成list,后来测试数据没过,显示这种情况视为 100+111。
不是比赛的题,题干就这么简略真的好吗...
注意:
链表的使用。
1. return &ans 会报错,必须先建一个起始节点然后return next。不知道为什么。
2. p->next = new ListNode(x); 注意这种写法。
3. -> . 的区别:->是指针指向其成员的运算符;.是结构体的成员运算符