Letcode Add two numbers 체인 테이블 추가

7567 단어 LeetCode
여기에 다른 사람이 쓴 코드를 제시하는데 매우 간결하지만 이해하기가 쉽지 않다...
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
        int x=0, y=0, carry=0, sum=0;
        ListNode *h=NULL, **t=&h;

        while (l1!=NULL || l2!=NULL){
            x = getValueAndMoveNext(l1);
            y = getValueAndMoveNext(l2);

            sum = carry + x + y;

            ListNode *node = new ListNode(sum%10);
            *t = node;
            t = (&node->next);

            carry = sum/10;
        }

        if (carry > 0) {
            ListNode *node = new ListNode(carry%10);
            *t = node;
        }

        return h;
    }
    int getValueAndMoveNext(ListNode* &l){
        int x = 0;
        if (l != NULL){
            x = l->val;
            l = l->next;
        }
        return x;
    }

다음은 자신의 코드를 제시하는데 그 결과는 마지막, 즉 가장 높은 곳에 0이 있다. 결과에 아무런 영향을 주지 않지만 완벽하지 않다. 친구가 해결 방법을 알려주길 바란다.
struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x) :val(x), next(NULL) {};
}; 
ListNode* addTwoNumbers(ListNode* p1, ListNode* p2)
{
    ListNode* result =new ListNode(0);
    ListNode* ptemp = result;
    int carry = 0;
    while (p1!=nullptr||p2!=nullptr)
    {
        int x =p1? p1->val:0;
        int y =p2? p2->val:0;
        int sum = x + y + carry;
        carry = sum % 10;
        ptemp->val=carry;
        ListNode* temp=new ListNode(0);
        ptemp->next = temp;
        ptemp = ptemp->next;
        carry = sum / 10;
        if (p1!=nullptr)
            p1 = p1->next;
        if (p2!=nullptr)
            p2 = p2->next;

    }
    if (carry == 1) 
    {
        ListNode* temp = new ListNode(0);
        temp->val = 1;
        ptemp->next = temp;
    }
    return result;
}


int main()
{
    ListNode* p1 = new ListNode(2);
    ListNode* p2 = new ListNode(4);
    ListNode* p3 = new ListNode(3);
    p1->next = p2;
    p2->next = p3;
    p3->next = nullptr;
    ListNode* p4 = new ListNode(5);
    ListNode* p5 = new ListNode(6);
    ListNode* p6 = new ListNode(4);
    ListNode* p7 = new ListNode(1);
    p4->next = p5;
    p5->next = p6;
    p6->next = p7;
    p7->next = nullptr;
    ListNode* result = addTwoNumbers(p1, p4);
    while (result)
    {
        cout << result->val << endl;
        result=result->next;
    }
    return 0;
}

“`

좋은 웹페이지 즐겨찾기