У меня проблема: я пытаюсь создать программу, которая использует связанные списки для вычитания и сложения в C++, однако я обратился к вам, потому что больше не знаю, почему она не работает должным образом, ниже это лучшая версия моего плохого кода. Если кто-нибудь скажет мне, что не так, я буду благодарен
Да, я знаю, что это более простые способы сделать это, но я нужен тот, который использует связанные списки
#include
#include
using namespace std;
class Node {
public:
int data;
Node *next;
Node(int val) {
data = val;
next = nullptr;
}
};
// Function to reverse the linked list
Node *reverse(Node *head) {
Node *prev = nullptr, *curr = head, *next;
while (curr != nullptr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
// Function to add two numbers represented by linked list
Node *addTwoLists(Node *num1, Node *num2) {
Node *res = nullptr, *curr = nullptr;
int carry = 0;
num1 = reverse(num1);
num2 = reverse(num2);
while (num1 != nullptr || num2 != nullptr || carry != 0) {
int sum = carry;
if (num1 != nullptr) {
sum += num1->data;
num1 = num1->next;
}
if (num2 != nullptr) {
sum += num2->data;
num2 = num2->next;
}
Node* newNode = new Node(sum % 10);
carry = sum / 10;
if (res == nullptr) {
res = newNode;
curr = newNode;
} else {
curr->next = newNode;
curr = curr->next;
}
}
return reverse(res);
}
// Function to subtract two numbers represented by linked list
Node *subtractTwoLists(Node *num1, Node *num2) {
Node *res = nullptr, *curr = nullptr;
int borrow = 0;
num1 = reverse(num1);
num2 = reverse(num2);
while (num1 != nullptr || num2 != nullptr || borrow != 0) {
int diff = borrow;
if (num1 != nullptr) {
diff += num1->data;
num1 = num1->next;
}
if (num2 != nullptr) {
diff -= num2->data;
num2 = num2->next;
}
if (diff < 0) {
diff += 10;
borrow = -1;
} else {
borrow = 0;
}
Node* newNode = new Node(diff);
if (res == nullptr) {
res = newNode;
curr = newNode;
} else {
curr->next = newNode;
curr = curr->next;
}
}
return reverse(res);
}
// Function to print the linked list
void printList(Node *head) {
Node *curr = head;
while (curr != nullptr) {
cout data;
curr = curr->next;
}
cout next = newNode;
curr = curr->next;
}
}
return head;
}
int main() {
string num1Str, num2Str;
// Take input for both numbers as strings
cout > num1Str;
cout > num2Str;
// Create linked lists from the input strings
Node *num1 = createLinkedListFromString(num1Str);
Node *num2 = createLinkedListFromString(num2Str);
// Addition
Node *sum = addTwoLists(num1, num2);
cout
Подробнее здесь: https://stackoverflow.com/questions/793 ... ist-in-cpp