题意:
假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
方法:
模拟
思路:首先,反转给定的两个链表,使之右对齐;
然后,初始化双指针遍历链表相加,并得到结果链表;最后,将结果链表反转即可。
class Solution {
public:
ListNode* addInList(ListNode* head1, ListNode* head2) {
head1=reverseList(head1);//反转链表
head2=reverseList(head2);
ListNode *p=head1,*q=head2;//初始化
ListNode *head=nullptr,*tail,*t;
int flag=0;//进位标志
while(p||q){
//加法
int temp=flag;
if(p){
temp+=p->val;
p=p->next;
}
if(q){
temp+=q->val;
q=q->next;
}
if(temp>9){//判断进位
flag=1;
temp%=10;
}else{
flag=0;
}
t=new ListNode(temp);//新建节点
if(head==nullptr){//插入节点
head=t;
}else{
tail->next=t;
}
tail=t;
}
if(flag){//最后判断进位
t=new ListNode(1);
if(head==nullptr){
head=t;
}else{
tail->next=t;
}
tail=t;
}
return reverseList(head);//反转答案链表
}
ListNode* reverseList(ListNode* head){//反转链表
if(head==nullptr)
return head;
ListNode *p=head,*q=head->next,*t;//初始化
p->next=nullptr;
while(q){//反转操作
t=q->next;
q->next=p;
p=q;
q=t;
}
return p;
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号