Code running properly when run on the editor, but when submitted, says it's wrong

I doubt this might be due to some pointer issues.
Any help would be appreciated.

algo:

  1. take first LL, reverse it
  2. store the reversed LL into char array
  3. convert the char array into int (using atoll) and save in "num1"
  4. follow same pattern for second LL and save the number in "num2"
  5. sum = num1 + num2
  6. convert sum into char array
  7. traverse the array and create the new LL
  8. reverse the LL created in prev step and return it

my code:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
#include<string.h>
#include<stdlib.h>
#define MAX_LENGTH 100

struct ListNode* addNode(struct ListNode* head, int value)
{
    struct ListNode *p;
    p = (struct ListNode*)malloc(sizeof(struct ListNode));
    p->val = value;
    p->next = head->next;
    head->next = p;
    return p;
}

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode* prev;
    struct ListNode* next;
    struct ListNode* cur;
    struct ListNode* l3;
    
    char arr1[MAX_LENGTH];
    memset(arr1, MAX_LENGTH, '\0');
    char arr2[MAX_LENGTH];
    memset(arr2, MAX_LENGTH, '\0');
    char arr3[MAX_LENGTH];
    memset(arr3, MAX_LENGTH, '\0');
    
    int i=0, j=0;
    long long int num1=0, num2=0, sum=0;
    
    next = NULL;
    prev = NULL;
    cur = l1;
    
    while(cur != NULL)
    {
        next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }
    
    l1 = prev;
    
    cur = l1;
    
    while(cur != NULL)
    {
        char temp[50];
        sprintf(temp, "%d", cur->val);
        arr1[i] = temp[0];
        cur = cur->next;
        i++;
    }
    
    num1 = atoll(arr1);
    
    next = NULL;
    prev = NULL;
    cur = l2;
    
    while(cur != NULL)
    {
        next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }
    
    l2 = prev;
    
    cur = l2;
    
    while(cur != NULL)
    {
        char temp[50];
        sprintf(temp, "%d", cur->val);
        arr2[j] = temp[0];
        cur = cur->next;
        j++;
    }
    
    num2 = atoll(arr2);
    
    sum = num1 + num2;
    
    printf("\n%lld, %lld, %lld\n", num1, num2, sum);
    
    struct ListNode* newNode;
    l3 = (struct ListNode*)malloc(sizeof(struct ListNode));
    
    sprintf(arr3, "%lld", sum);
    int k=0;
    
    cur = l3;
    cur->next = NULL;
    next = NULL;
    
    int counter = 0;
    while(arr3[k] != NULL)
    {
        counter++;
        if(counter <= 1)
        {
            cur->val = arr3[k] - '0';
            next = cur;
        }
        else
        {
            newNode = addNode(next, arr3[k] - '0');
            next = newNode;
            next->next = NULL;
        }
        k++;
    }
    
    next = NULL;
    prev = NULL;
    cur = l3;
    
    while(cur != NULL)
    {
        next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }
    
    l3 = prev;
    
    return l3;
}
Comments (0)