我需要一些关于家庭作业的想法。请考虑以下定义:
typedef struct listNode {
int* dataPtr;
struct listNode* next;
} ListNode;
typedef struct list {
ListNode* head;
ListNode* tail;
} List;
每个列表节点表示一位数。每个数字都由一个列表表示,但方式相反:数字的最后一位是列表的第一个列表节点,数字的第一个数字是列表的最后一个列表节点。
我已经编写了函数
void addNumbers(List n1, List n2, List *sum);
这将返回一个新列表,其中包含其他两个列表的总和。
现在我必须编写乘法函数:
void multNumbers(List n1, List n2 , List* prod);
而且我有点纠结于如何实现它。这不是关于代码,而是关于如何做到这一点。不用说,我们不允许将数字转换为整数,乘以并将结果转换为列表。
任何帮助将不胜感激。
谢谢。
这将是代码重用的一个很好的练习。既然您已经创建了一个将两个链表数字相加的函数,您是否可以利用该函数来执行(部分)乘法?毕竟,乘法可以通过重复将第一个数字乘以第二个数字中的一个数字,然后将所有结果相加来手动执行。尝试以下操作:
- 创建一个将包含结果的链表编号,并将其设置为零
- 循环遍历第二个数字的数字
- 对于每个数字,将第一个数字乘以该数字(你应该写一个单独的函数来做到这一点;如果你设法写了加法函数,这应该不会太难)
- 在结果末尾附加零,以便数字向左移动足够远
- 使用
addNumbers()
将数字添加到结果中