题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
W:
将需要的两个链表进行反转,便于计算;
叠加后的链表为符合题目要求,需要再次反转
N:
ListNode* cur= new ListNode(val);方式增加新的节点
注意遍历时需要判断是否为空,到下一个也需要判断
如果两个链表都为空,但是还有进位,则需要继续循环
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ ListNode *reverseList(ListNode *head) { if (head == nullptr || head->next == nullptr) return head; ListNode *l = head, *r = l->next; l->next = nullptr; while (r) { ListNode *t = r->next; r->next = l; l = r; r = t; } return l; } ListNode* addInList(ListNode* head1, ListNode* head2) { // write code here if(head1==nullptr){ return head2; } if(head2==nullptr){ return head1; } ListNode* l1= reverseList(head1); ListNode* l2= reverseList(head2); ListNode* res= new ListNode(0); ListNode* cur=res; int l=0; while(l1 || l2 || l ){ //如果两个链表都为空,但是还有进位,则需要继续循环 int v1= l1? l1->val: 0;//需要判断是否为空节点 int v2=l2 ? l2->val: 0; int sum=(l+v1+v2)%10; l=(l+v1+v2)/10; cur->next=new ListNode(sum);//避免多出节点 cur=cur->next;//note if(l1) l1=l1->next;//还是需要判断 if(l2) l2=l2->next; } res=res->next; res=reverseList(res); return res; } };