开心丶 发表于 2018-12-4 17:44:29

用单链表实现两个大整数的相加运算

本帖最后由 开心丶 于 2018-12-4 17:50 编辑

用单链表实现两个大整数的相加运算
(1)将用户输入的十进制整数字符串转化为带头结点的单链表,每个节点存放一个整数位。
(2)求两个整数单链表相加的结果单链表
(3)求结果单链表的中间位,如123的中间位位2、1234的中间位为2。



很急,麻烦大佬了。

理想小青年 发表于 2018-12-4 17:44:30

本帖最后由 理想小青年 于 2018-12-14 11:49 编辑

有意思,没有时间去实现,思路如下:
1、输入整数(十进制), 取每一个数值,可以左到右依次,循环添加节点,每一个节点保存一个拆分开的数值。

AllocListNode(元素个数);假设根据这个函数已经提前申请好了链表空间。函数是自己实现。

for(int i = 0 ; i < 链表长度, ++i)
{
    pLink->Data = 拆分的第一个数值;
    ++pLink;
}

2、进行链表运算, 节点循环相加(取链表中保存数据的值)。两个链表相加意思理解的模糊,应该是每个节点相加。

for(int i = 0 ; i < 链表长度, ++i)
{
    // 1. 把数据累计相加到数组里面 应该不是这个意思?
    Number = pLink->Data + pLink1->Data;
    // 2. 或者就是把数组保存到数组,在进行相加
    Number = pLink->Data;
    Number1 = pLink1->Data;
    // 这样就可以链表还原数值,比如输入的数值如123或者123456 当两个链表大小不一样时候 不可以在一个循环内

    ++pLink;
    ++pLink1;
}

   然后累计相加,办法可能有点笨

3、求中间位这个更快,可以定义变量记录一下链表中元素,也可以遍历链表得到一共几个元素,元素个数找中间点(偶数运算结果 - 1,奇数运算结果不做优化),即可符合题意。

for(int i = 0 ; i < 链表长度; ++i)
{
    if(查询的中间数 == i)
      break;
    pLink++;
}

// 根据偶数、奇数进行优化
// 返回数据
return pLink->Data;
页: [1]
查看完整版本: 用单链表实现两个大整数的相加运算