#include <iostream>
using namespace std;
// Node structure
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
class Solution {
public:
Node* reverse(Node* head) {
Node* cur = head, *prev = nullptr, *nxt = nullptr;
while (cur) {
nxt = cur->next;
cur->next = prev;
prev = cur;
cur = nxt;
}
return prev;
}
Node* addOne(Node* head) {
head = reverse(head);
Node* cur = head;
int carry = 1;
while (cur) {
int sum = cur->data + carry;
cur->data = sum % 10;
carry = sum / 10;
if (!cur->next && carry) {
cur->next = new Node(carry);
break;
}
cur = cur->next;
}
return reverse(head);
}
};
// Helper to print the list
void printList(Node* head) {
while (head) {
cout << head->data;
head = head->next;
}
cout << endl;
}
// Helper to create linked list from digits
Node* createList(const string& number) {
Node* head = new Node(number[0] - '0');
Node* current = head;
for (size_t i = 1; i < number.size(); ++i) {
current->next = new Node(number[i] - '0');
current = current->next;
}
return head;
}
int main() {
string num = "1299"; // example input number
Node* head = createList(num);
cout << "Original number: ";
printList(head);
Solution sol;
Node* result = sol.addOne(head);
cout << "After adding one: ";
printList(result);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gTm9kZSBzdHJ1Y3R1cmUKc3RydWN0IE5vZGUgewogICAgaW50IGRhdGE7CiAgICBOb2RlKiBuZXh0OwogICAgTm9kZShpbnQgdmFsKSA6IGRhdGEodmFsKSwgbmV4dChudWxscHRyKSB7fQp9OwoKY2xhc3MgU29sdXRpb24gewpwdWJsaWM6CiAgICBOb2RlKiByZXZlcnNlKE5vZGUqIGhlYWQpIHsKICAgICAgICBOb2RlKiBjdXIgPSBoZWFkLCAqcHJldiA9IG51bGxwdHIsICpueHQgPSBudWxscHRyOwogICAgICAgIHdoaWxlIChjdXIpIHsKICAgICAgICAgICAgbnh0ID0gY3VyLT5uZXh0OwogICAgICAgICAgICBjdXItPm5leHQgPSBwcmV2OwogICAgICAgICAgICBwcmV2ID0gY3VyOwogICAgICAgICAgICBjdXIgPSBueHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcmV2OwogICAgfQoKICAgIE5vZGUqIGFkZE9uZShOb2RlKiBoZWFkKSB7CiAgICAgICAgaGVhZCA9IHJldmVyc2UoaGVhZCk7CiAgICAgICAgTm9kZSogY3VyID0gaGVhZDsKICAgICAgICBpbnQgY2FycnkgPSAxOwoKICAgICAgICB3aGlsZSAoY3VyKSB7CiAgICAgICAgICAgIGludCBzdW0gPSBjdXItPmRhdGEgKyBjYXJyeTsKICAgICAgICAgICAgY3VyLT5kYXRhID0gc3VtICUgMTA7CiAgICAgICAgICAgIGNhcnJ5ID0gc3VtIC8gMTA7CgogICAgICAgICAgICBpZiAoIWN1ci0+bmV4dCAmJiBjYXJyeSkgewogICAgICAgICAgICAgICAgY3VyLT5uZXh0ID0gbmV3IE5vZGUoY2FycnkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJldmVyc2UoaGVhZCk7CiAgICB9Cn07CgovLyBIZWxwZXIgdG8gcHJpbnQgdGhlIGxpc3QKdm9pZCBwcmludExpc3QoTm9kZSogaGVhZCkgewogICAgd2hpbGUgKGhlYWQpIHsKICAgICAgICBjb3V0IDw8IGhlYWQtPmRhdGE7CiAgICAgICAgaGVhZCA9IGhlYWQtPm5leHQ7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7Cn0KCi8vIEhlbHBlciB0byBjcmVhdGUgbGlua2VkIGxpc3QgZnJvbSBkaWdpdHMKTm9kZSogY3JlYXRlTGlzdChjb25zdCBzdHJpbmcmIG51bWJlcikgewogICAgTm9kZSogaGVhZCA9IG5ldyBOb2RlKG51bWJlclswXSAtICcwJyk7CiAgICBOb2RlKiBjdXJyZW50ID0gaGVhZDsKICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnVtYmVyLnNpemUoKTsgKytpKSB7CiAgICAgICAgY3VycmVudC0+bmV4dCA9IG5ldyBOb2RlKG51bWJlcltpXSAtICcwJyk7CiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CiAgICB9CiAgICByZXR1cm4gaGVhZDsKfQoKaW50IG1haW4oKSB7CiAgICBzdHJpbmcgbnVtID0gIjEyOTkiOyAgLy8gZXhhbXBsZSBpbnB1dCBudW1iZXIKICAgIE5vZGUqIGhlYWQgPSBjcmVhdGVMaXN0KG51bSk7CgogICAgY291dCA8PCAiT3JpZ2luYWwgbnVtYmVyOiAiOwogICAgcHJpbnRMaXN0KGhlYWQpOwoKICAgIFNvbHV0aW9uIHNvbDsKICAgIE5vZGUqIHJlc3VsdCA9IHNvbC5hZGRPbmUoaGVhZCk7CgogICAgY291dCA8PCAiQWZ0ZXIgYWRkaW5nIG9uZTogIjsKICAgIHByaW50TGlzdChyZXN1bHQpOwoKICAgIHJldHVybiAwOwp9Cg==