leetcode第2题-Add Two Numbers

来源:互联网 发布:足球首发阵容软件 编辑:程序博客网 时间:2024/06/08 13:45
第二题相对于第一题较简单,主要考察的链表的操作,两个链表的相加操作。
#include<iostream>using namespace std;struct ListNode{int val;ListNode *next;ListNode(int x):val(x),next(NULL){}};ListNode *addTwoNumbers(ListNode *l1,ListNode *l2){ListNode *tail=new ListNode(0);int carry=0;ListNode *ptr=tail;while((l1!=NULL)||(l2!=NULL)){int val1=0;int val2=0;if(l1!=NULL){val1=l1->val;l1=l1->next;}if(l2!=NULL){val2=l2->val;l2=l2->next;}int tmp=val1+val2+carry;ptr->next=new ListNode(tmp%10);carry=tmp/10;ptr=ptr->next;}if(carry==1)ptr->next=new ListNode(1);return tail->next;}int main(){int count_l1;cout<<"请输入第一个链表的长度:";while(scanf("%d",&count_l1)!=EOF){cout<<"请输入第一个链表:\n";int m,i;ListNode *l1=new ListNode(0);ListNode *p1=l1;for(i=0;i<count_l1;i++){scanf("%d",&m);ListNode *tmp=new ListNode(m);p1->next=tmp;p1=p1->next;}cout<<"请输入第二个链表的长度:";int count_l2;scanf("%d",&count_l2);cout<<"请输入第二个链表:\n";ListNode *l2=new ListNode(0);ListNode *p2=l2;for(i=0;i<count_l2;i++){scanf("%d",&m);ListNode *tmp=new ListNode(m);p2->next=tmp;p2=p2->next;}ListNode *p=addTwoNumbers(l1->next,l2->next);cout<<"相加之后的结果是:";while(p!=NULL){cout<<p->val;cout<<" ";p=p->next;}cout<<endl;cout<<"请输入第一个链表的长度:";}return 0;}
carry用于表示进位,从第一位开始让两个链表的数相加,加到没有数为止,如果最后carry等于1,则说明还有一个进位,再添加一个val为1的节点即可。
1 0
原创粉丝点击