问题详述: 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。
算法实现:
1.将链表翻转
a.实现原理图:
b.实现函数
struct ListNode* reverseList(struct ListNode* head)
struct ListNode *end, *temp;
end=head;
head=NULL;
while(end!=NULL)
{
temp=head;
head=end;
end=end->next;
head->next=temp;
//reverse
}
return head;
}
struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 )
{
int jw=0, n;
struct ListNode *head, *node;
if(head1==NULL && head2!=NULL) return head2;
if(head1!=NULL && head1==NULL) return head1;
if(head1==NULL && head2==NULL) return NULL;
head1=reverseList(head1); //将链表反向
head2=reverseList(head2); //将链表反向
head=NULL;
/* 实现两数相加,从低位开始 */
while(head1!=NULL || head2!=NULL || jw>0)
// 对while中jw>0,防止两个链表在一样长 且在最后一位产生进位的情况,
{
n=jw;
if(head1!=NULL)
{
n+=head1->val;
head1=head1->next;
}
if(head2!=NULL)
{
n+=head2->val;
head2=head2->next;
}
jw=n/10;
node=(struct ListNode*)malloc(sizeof(struct ListNode));//建立一个节点申请一次空间
node->val=n%10;
node->next=head;
head=node;
}
return head;
}