题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
2022.0815算法第22题链表相加(二)
对链表表示的两个整数进行相加,返回一个结果链表
首先要知道倒序相加算法,将低位相加,确保进位正确,把短的链表后面的数据视为零
最后一位需要进位时单独进行判断。
首先创建头指针和尾指针,以及进位标志。
ListNode* head=nullptr,*tail=nullptr; int carry=0;确保当一个链表为空时仍然能够向后继续刷新,后面的视为0
对同位数字进行相加
int n1=head1?head1->val:0; int n2=head2?head2->val:0; int sum=n1+n2+carry;根据sum的值,添加到新的链表中,更新尾指针。
if(!head){ head=tail=new ListNode(sum%10); } else{ tail->next=new ListNode(sum%10); tail=tail->next; }更新进位标志,并向后移动链表
carry=sum/10; if(head1) head1=head1->next; if(head2) head2=head2->next;当最后一位需要进位时,这是需要进行判断。
if(carry==1) tail->next=new ListNode(1);一直循环直到两个链表都为空
while(head1||head2){针对这个正序的链表相加,首先想到的是对链表进行反转,然后进行上述算法操作。
head1=reveList(head1); head2=reveList(head2);最后将得到的链表也进行反转即可。