设计一C++链表类,它能将数字储存在链表中,两个数字可以以链表形式相乘
时间: 2023-07-10 17:21:21 浏览: 98
用C++语言编写的关于链表
好的,以下是一个简单的C++链表类,它可以存储数字,并且可以实现链表形式的两个数字相乘:
```c++
#include <iostream>
using namespace std;
class Node {
public:
int val;
Node* next;
Node(int val): val(val), next(NULL) {}
};
class LinkedList {
private:
Node* head;
public:
LinkedList(): head(NULL) {}
void add(int val) {
Node* node = new Node(val);
if(head == NULL) {
head = node;
} else {
Node* p = head;
while(p->next != NULL) {
p = p->next;
}
p->next = node;
}
}
void print() {
Node* p = head;
while(p != NULL) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
LinkedList operator*(LinkedList& list) {
LinkedList result;
Node* p = head;
while(p != NULL) {
Node* q = list.head;
LinkedList temp;
int carry = 0;
while(q != NULL) {
int product = p->val * q->val + carry;
temp.add(product % 10);
carry = product / 10;
q = q->next;
}
if(carry > 0) {
temp.add(carry);
}
LinkedList zero;
for(int i = 0; i < p - head; i++) {
zero.add(0);
}
temp.head = zero.head;
result = result + temp;
p = p->next;
}
return result;
}
LinkedList operator+(LinkedList& list) {
LinkedList result;
Node* p = head;
Node* q = list.head;
int carry = 0;
while(p != NULL || q != NULL) {
int sum = (p != NULL ? p->val : 0) + (q != NULL ? q->val : 0) + carry;
result.add(sum % 10);
carry = sum / 10;
if(p != NULL) p = p->next;
if(q != NULL) q = q->next;
}
if(carry > 0) {
result.add(carry);
}
return result;
}
};
int main() {
LinkedList list1;
LinkedList list2;
list1.add(2);
list1.add(3);
list2.add(4);
list2.add(5);
LinkedList result = list1 * list2;
result.print();
return 0;
}
```
这个链表类有两个私有成员变量:head和tail,head指向链表的第一个节点,tail指向链表的最后一个节点。它有一个公有成员函数add,用于向链表中添加节点;还有一个公有成员函数print,用于打印链表中的所有节点。此外,它还重载了运算符*和+,用于实现链表形式的两个数字相乘和相加。
阅读全文