描述
假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
思路:
可以使用栈的“先进后出”特性,先将两个链表分别做入栈操作,然后每次两个栈各出栈一个元素进行相加求余操作,因为相加所以肯定要考虑进位操作,所以设置一位为进位标识符,如果相加两元素>=10,则置为1,在每次相加时加上进位数然后将进位数置为0,再判断元素和是否>=10,对进位位进行操作,然后求余之后的数就可以构造为一个节点使用头插法转换为链表了。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addInList(ListNode* head1, ListNode* head2) {
// write code here
stack<ListNode*> stack_1;
stack<ListNode*> stack_2;
int JinWei = 0;
ListNode* root= new ListNode(-1);
//链表入栈
while(head1 || head2)
{
if(head1)
{
stack_1.push(head1);
head1 = head1->next;
}
if(head2)
{
stack_2.push(head2);
head2 = head2->next;
}
}
//元素出栈、求和处理、头插法形成新链表
while(!stack_1.empty() || !stack_2.empty() || JinWei != 0)
{
int Num_1,Num_2,Yv;
if(!stack_1.empty())
{
Num_1=stack_1.top()->val;
stack_1.pop();
}
else Num_1=0;
if(!stack_2.empty())
{
Num_2=stack_2.top()->val;
stack_2.pop();
}
else Num_2=0;
Yv=(Num_1+Num_2+JinWei)%10;
if(Num_1+Num_2+JinWei >=10) JinWei=1;
else JinWei = 0;
ListNode* temp = new ListNode(Yv);
temp->next = root->next;
root->next = temp;
}
return root->next;
}
};