fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Node structure
  5. struct Node {
  6. int data;
  7. Node* next;
  8. Node(int val) : data(val), next(nullptr) {}
  9. };
  10.  
  11. class Solution {
  12. public:
  13. Node* reverse(Node* head) {
  14. Node* cur = head, *prev = nullptr, *nxt = nullptr;
  15. while (cur) {
  16. nxt = cur->next;
  17. cur->next = prev;
  18. prev = cur;
  19. cur = nxt;
  20. }
  21. return prev;
  22. }
  23.  
  24. Node* addOne(Node* head) {
  25. head = reverse(head);
  26. Node* cur = head;
  27. int carry = 1;
  28.  
  29. while (cur) {
  30. int sum = cur->data + carry;
  31. cur->data = sum % 10;
  32. carry = sum / 10;
  33.  
  34. if (!cur->next && carry) {
  35. cur->next = new Node(carry);
  36. break;
  37. }
  38. cur = cur->next;
  39. }
  40.  
  41. return reverse(head);
  42. }
  43. };
  44.  
  45. // Helper to print the list
  46. void printList(Node* head) {
  47. while (head) {
  48. cout << head->data;
  49. head = head->next;
  50. }
  51. cout << endl;
  52. }
  53.  
  54. // Helper to create linked list from digits
  55. Node* createList(const string& number) {
  56. Node* head = new Node(number[0] - '0');
  57. Node* current = head;
  58. for (size_t i = 1; i < number.size(); ++i) {
  59. current->next = new Node(number[i] - '0');
  60. current = current->next;
  61. }
  62. return head;
  63. }
  64.  
  65. int main() {
  66. string num = "1299"; // example input number
  67. Node* head = createList(num);
  68.  
  69. cout << "Original number: ";
  70. printList(head);
  71.  
  72. Solution sol;
  73. Node* result = sol.addOne(head);
  74.  
  75. cout << "After adding one: ";
  76. printList(result);
  77.  
  78. return 0;
  79. }
  80.  
Success #stdin #stdout 0s 5292KB
stdin
Standard input is empty
stdout
Original number: 1299
After adding one: 1300