求C语言大师啊!!!多谢!!!急急急!!!

题目:
实现两个长整数相加:要求用链表(单链表或双向链表)实现两个任意位数的整数相加。例如,为存储100位的整数可以建立有100个结点的单链表,每个结点存储1位
这是我做到一半的程序,希望你可以按照我的思路帮我完成接下来的步骤,谢谢!!用的是数据结构的算法。我想用逆链表实现。
#include<stdio.h>
#include<malloc.h>
typedef struct LNode
{
int data;
structLNode *next;
}LNode,*Linklist;
Linklist create()
{
char x;
Linklist p,L;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
while((x=getchar())!='\n')
{
p=(Linklist)malloc(sizeof(LNode));
p->data=x-48;
p->next=L->next;
L->next=p;
}
return(L);
}
void p(Linklist q)
{
Linklists;
s=q->next;
while(s)
{
printf("%d",s->data);
s=s->next;
}
}

void main()
{Linklist d;
d=create();
p(d);
}

第1个回答  2013-12-18
哪来的逆链表。
用单链表的话就是表头存的是个位数。
这个题目使用单链表即可。追问

能不能帮写一下。。。我的思考路就是逆链表。。下午交作业,,谢谢~~

追答

我想知道,这两个需要计算的数是已经给定的了,还是要求用户输入的?

追问

用户输入,谢谢!!

追答

刚回来。我觉得你的想法有误区。

如果你用的是单链表,那么在进行加法运算的时候,是要从个位开始计算的,那么链表头部应该存储个位后面为高位。刚看了下你的代码,你从输入流得到的输入直接写入链表,也就是说链表头是高位数的数,那么在后面的操作中,你要么每位的操作时都去遍历找到那一位,要么就得先把链表逆序。所以建议你使用双向链表或者得到的输入先放入缓存的字符串,然后再将字符串逆序存入链表。

我觉得你已经写到了这里,证明你是能够自己完成的,你应该先尝试自己写。

我也试着按照你的思路给你写一份,稍后传上去。


代码见附件,蛋疼的单链表,双向链表会简单许多。

相似回答