设计一个C++链表类,它能将数字储存在链表中,并且能实现数字以链表形式相乘
时间: 2023-08-04 09:24:21 浏览: 88
好的,我可以为您设计一个基本的C++链表类,它可以存储数字并实现数字相乘的功能。以下是代码实现。
```c++
#include <iostream>
using namespace std;
class Node{
public:
int val;
Node* next;
Node(int v):val(v), next(nullptr){}
};
class LinkedList{
public:
Node* head;
LinkedList():head(nullptr){}
void add(int v){
Node* newNode = new Node(v);
if(head == nullptr){
head = newNode;
}else{
Node* temp = head;
while(temp->next != nullptr){
temp = temp->next;
}
temp->next = newNode;
}
}
void display(){
Node* temp = head;
while(temp != nullptr){
cout << temp->val;
temp = temp->next;
}
cout << endl;
}
LinkedList* multiply(LinkedList* other){
LinkedList* res = new LinkedList();
int carry = 0, sum = 0;
Node* temp1 = head;
while(temp1 != nullptr){
Node* temp2 = other->head;
LinkedList* tempRes = new LinkedList();
for(int i=0; i<carry; i++){
tempRes->add(0);
}
carry = 0;
while(temp2 != nullptr){
sum = temp1->val * temp2->val + carry;
carry = sum / 10;
sum = sum % 10;
tempRes->add(sum);
temp2 = temp2->next;
}
if(carry > 0){
tempRes->add(carry);
carry = 0;
}
res = res->add(tempRes);
temp1 = temp1->next;
}
return res;
}
LinkedList* add(LinkedList* other){
LinkedList* res = new LinkedList();
Node* temp1 = head;
Node* temp2 = other->head;
int carry = 0, sum = 0;
while(temp1 != nullptr || temp2 != nullptr){
sum = carry;
if(temp1 != nullptr){
sum += temp1->val;
temp1 = temp1->next;
}
if(temp2 != nullptr){
sum += temp2->val;
temp2 = temp2->next;
}
carry = sum / 10;
sum = sum % 10;
res->add(sum);
}
if(carry > 0){
res->add(carry);
}
return res;
}
};
int main(){
LinkedList* l1 = new LinkedList();
l1->add(1);
l1->add(2);
l1->add(3);
LinkedList* l2 = new LinkedList();
l2->add(4);
l2->add(5);
LinkedList* res = l1->multiply(l2);
res->display();
return 0;
}
```
这是一个简单的C++链表类,其中包含两个类:Node和LinkedList。Node类是链表节点的类,LinkedList类是链表的类。
LinkedList类有三个方法:add(添加节点到链表中),display(显示链表中的节点值)和multiply(将两个链表的节点值相乘)。multiply方法使用两个链表的节点值来计算它们的乘积,然后返回一个新的链表作为结果。在multiply方法中,我们首先遍历第一个链表的节点,然后遍历第二个链表的节点,然后将它们的乘积添加到一个临时链表中。在这个过程中,我们还需要考虑进位。最后,将所有的临时链表相加,得到最终结果。
在上面的示例中,我们创建了两个链表l1和l2,然后调用l1的multiply(l2)方法来计算它们的乘积。结果将存储在一个新的链表中,并通过调用该链表的display方法来显示结果。
希望这个代码可以帮助您解决问题。
阅读全文