链表两数相加,链表p→next是什么
[链表]BM11链表相加(二)-中等
知识点链表模拟
描述假设链表中每一个节点的值都在0 - 9之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。数据范围:链表任意值
要求:空间复杂度,时间复杂度
例如:链表一为9- 3- 7,链表2为6- 3,最后生成新的结果链表为1- 0- 0- 0。
示例一输入:
[9,3,7],[6,3]复制返回值:
{1,0,0,0}复制说明:
如题面解释示例2输入:
[0],[6,3]复制返回值:
{6,3}复制
备注:1 \leq n先生\莱克10^61n,m106
0 \leq a_i,b_i \leq 90ai,bi9题解思路:
很简单,借助栈实现
#包含位/标准数据h。
结构列表节点
{
int值
结构列表节点*下一个
ListNode(int x) : val(x),next(nullptr)
{
}
ListNode()=默认值;
};
ListNode * addin列表(ListNode * head 1,ListNode *head2)
{
if (head1==nullptr)
{
返回head2
}
if (head2==nullptr)
{
返回head1
}
STD:stack ListNode * S1;
STD:stack ListNode * S2;
int carray=0;
while (head1!=nullptr)
{
S1。推(头1);
head 1=head 1-next;
}
while (head2!=nullptr)
{
S2。推(头2);
head 2=head 2-next;
}
STD:stack ListNode * ans;
auto add _ stack=[ans](STD:stack list node * s,int carray)
{
auto node=new ListNode(s . top()-val carray);
carray=node-val/10;
node-val=node-val % 10;
ans.push节点);
s。pop();
};
而(!s1.empty() !s2.empty())
{
if (s1.empty())
{
add_stack(s2,carray);
继续;
}
if (s2.empty())
{
add_stack(s1,carray);
继续;
}
auto node=new ListNode(S1。托普()——瓦尔S2。top()-val carray);
carray=node-val/10;
node-val=node-val % 10;
ans.push节点);
S1。pop();
S2。pop();
}
如果(进位0)
{
ans。push(new ListNode(1));
}
ListNode * list=nullptr
ListNode * tail _ node=nullptr
而(!ans.empty())
{
if (list==nullptr)
{
list=ans。top();
tail _ node=list
}
其他
{
tail _ node-next=ans。top();
tail _ node=tail _ node-next;
}
ans。pop();
}
退货单;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。