यहां हम देखेंगे कि दो संख्याओं को कैसे जोड़ा जाए जो अलग-अलग लिंक्ड लिस्ट में स्टोर हैं। लिंक्ड लिस्ट में, संख्याओं के प्रत्येक अंक को स्टोर किया जाता है। यदि संख्या 512 है, तो इसे इस तरह स्टोर किया जाएगा:
512 = (5) -> (1) -> (2) -> NULL
हम इस प्रकार की दो लिस्ट प्रदान कर रहे हैं, हमारा कार्य उन्हें जोड़ना और योग की गणना के बाद परिणाम प्राप्त करना है। यहां हम C++ STL लिंक्ड लिस्ट का उपयोग कर रहे हैं।
एल्गोरिदम
addListNumbers(l1, l2)
शुरुआत
अग्रणी 0 जोड़कर l1 और l2 की लंबाई समायोजित करें
carry := 0
res := एक खाली लिस्ट
l1 के प्रत्येक नोड n के लिए, अंतिम से पहले तक स्कैन करें
item := (l1.item + l2.item + carry) mod 10
item को res की शुरुआत में डालें
carry := (l1.item + l2.item + carry) / 10
पूर्ण
यदि carry 0 नहीं है, तो
carry को res की शुरुआत में जोड़ें
यदि समाप्त
res वापस करें
समाप्त
उदाहरण
#include <iostream>
#include <list>
using namespace std;
list<int> addListNumbers(list<int> l1, list<int> l2) {
if (l1.size() > l2.size()) {
for (int i = l2.size(); i != l1.size(); i++)
l2.push_front(0);
} else if (l1.size() < l2.size()) {
for (int i = l1.size(); i != l2.size(); i++)
l1.push_front(0);
}
list<int>::reverse_iterator it1 = l1.rbegin();
list<int>::reverse_iterator it2 = l2.rbegin();
list<int> result;
int carry = 0;
while (it1 != l1.rend()) {
result.push_front((*it1 + *it2 + carry) % 10);
carry = (*it1 + *it2 + carry) / 10;
it1++; it2++;
}
if (carry != 0)
result.push_front(carry);
return result;
}
list<int> numToList(int n) {
list<int> numList;
while (n != 0) {
numList.push_front(n % 10);
n /= 10;
}
return numList;
}
void displayListNum(list<int> numList) {
for (auto it = numList.begin(); it != numList.end(); it++)
cout << *it;
cout << endl;
}
int main() {
int n1 = 512;
int n2 = 14578;
list<int> n1_list = numToList(n1);
list<int> n2_list = numToList(n2);
list<int> res = addListNumbers(n1_list, n2_list);
cout << "First number: "; displayListNum(n1_list);
cout << "Second number: "; displayListNum(n2_list);
cout << "Result: "; displayListNum(res);
return 0;
}
आउटपुट
First number: 512 Second number: 14578 Result: 15090