链表——竖式相加
2018-05-29 23:01 TaoGePureYeahMan 阅读(146) 评论(0) 收藏 举报等长度竖式相加,代码如下;非等长度添加值为零节点到等长度即可。未做。最高位还有进位也需要加一个节点,未做。
#include "stdio.h" #include "stdlib.h" #include "malloc.h" #include "string.h" struct Number { int val; struct Number *next; }; typedef struct Number Numb; Numb *CreatListNum(int n) { Numb *head; Numb *p , *pre; int i; head=(Numb *)malloc(sizeof(Numb)); head->next=NULL; pre=head; printf("input number of the NUMBER !\n"); for(i=1;i<=n;i++) { p=(Numb*)malloc(sizeof(Numb)); scanf("%d",&p->val); pre->next=p; pre=p;//equ to pre=pre->next; } p->next=NULL; return head; } Numb *ListSum(Numb *number1,int num1Length,Numb *number2,int num2Length) { Numb *head; Numb *p,*pre; int i,min,carry; carry=0; head=(Numb*)malloc(sizeof(Numb)); head->next=NULL; pre=head; min=num1Length<num2Length ? num1Length:num2Length; for(i=0;i<min;i++) { p=(Numb*)malloc(sizeof(Numb)); if(carry==0) { p->val=number1->val+number2->val; } if(carry==1) { p->val=number1->val+number2->val+1; carry=0; } if(p->val>=10) { carry=1; p->val=p->val%10; } pre->next=p; pre=p; number1=number1->next; number2=number2->next; } return head; } void PrintList(Numb *headp) { Numb *p; p=headp->next; while(p) { printf("%d",p->val); p=p->next; } printf("\n"); } void main() { Numb *number1; Numb *number2; Numb *number3; int length1,length2; printf("Input Number1 length\n"); scanf("%d",&length1); number1=CreatListNum(length1); PrintList(number1); printf("Input Number2 length\n"); scanf("%d",&length2); number2=CreatListNum(length2); PrintList(number2); printf("The resule is :\n"); number3= ListSum(number1->next,length1,number2->next,length2); PrintList(number3); }
测试:
链表逆序存储数字,逆序输出,有便于进位

即:65432+19567=84999
浙公网安备 33010602011771号