Accept C solution using stack implemented by myself


  • 0
    C
    struct Node{
        int val;
        struct Node* next;
    };
    struct StackNode{
        int size;
        struct Node* top;
    };
    typedef struct StackNode* Stack;
    
    void makeEmpty(Stack stk)
    {
        stk->size = 0;
        stk->top = NULL;
    }
    
    Stack createStack()
    {
        Stack stk = malloc(sizeof(struct StackNode));
        makeEmpty(stk);
        return stk;
    }
    
    void push(Stack stk, int x)
    {
        struct Node* tmp = malloc(sizeof(struct Node));
        tmp->next = NULL;
        tmp->val = x;
        if(stk->size == 0){
            stk->top = tmp;
        }else{
            tmp->next = stk->top;
            stk->top = tmp;
        }
        stk->size++;
    }
    
    void pop(Stack stk)
    {
        struct Node* tmp = stk->top;
        stk->top = tmp->next;
        stk->size--;
        free(tmp);
    }
    
    int top(Stack stk)
    {
        if(stk && stk->top)
            return stk->top->val;
        return 0;
    }
    
    void destroyStack(Stack stk)
    {
        while(stk->size){
            pop(stk);
        }
        free(stk);
    }
    
    void traverse(struct ListNode* list, Stack stk)
    {
        while(list){
            push(stk, list->val);
            list = list->next;
        }
    }
    
    struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
        Stack stk1 = createStack();
        Stack stk2 = createStack();
        Stack ans  = createStack();
        
        traverse(l1, stk1);
        traverse(l2, stk2);
    
        int sum = 0;
        while(stk1->size || stk2->size){
            if(stk1->size){
                sum += top(stk1);
                pop(stk1);
            }
            if(stk2->size){
                sum += top(stk2);
                pop(stk2);
            }
            push(ans, sum % 10);
            sum /= 10;
        }
        if(sum) push(ans, sum);
        destroyStack(stk1);
        destroyStack(stk2);
        
        return ans->top;
    }
    

Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.