题解 | #链表相加(二)#

链表相加(二)

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);
最后将得到的链表也进行反转即可。







#算法题#
全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务