Длинное вычитание и сложение с использованием связанного списка в cppC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Длинное вычитание и сложение с использованием связанного списка в cpp

Сообщение Anonymous »

У меня проблема: я пытаюсь создать программу, которая использует связанные списки для вычитания и сложения в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»