LeetCode 2 두 수 더하기 - C 언어

두 개 드 리 겠 습 니 다. 헛 되 지 않다 의 체인 시 계 는 두 개의 마이너스 정 수 를 나타 내 는 데 쓰 인 다.그 중에서 도 이들 각자 의 자릿수 는 역순 의 방식 으로 저장 되 고 그들의 모든 노드 는 저장 할 수 밖 에 없다. 한 사람 숫자
만약 우리 가 이 두 개의 수 를 더 하면 새로운 링크 로 돌아 가 그들의 합 을 나 타 낼 것 이다.
숫자 0 을 제외 하고 이 두 숫자 는 0 으로 되 지 않 는 다 고 가정 할 수 있 습 니 다. 서두
예시:
(2 -> 4 -> 3) + (5 -> 6 -> 4)
7 -> 0 -> 8
342 + 465 = 807
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *l3 = (struct ListNode *)malloc(sizeof(struct ListNode));
    struct ListNode *p1 = l1, *p2 = l2, *p3 = l3;
    p3 -> next = NULL;
    p3 -> val = 0;
    while(p1 != NULL && p2 != NULL){
        struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
        node -> val = 0;
        node -> next = NULL; 
        p3 -> next = node;
        p3 -> val += p1 -> val + p2 -> val;
        if(p3 -> val >= 10){
            p3 -> val -= 10;
            node -> val = 1;
        }
        p1 = p1 -> next;
        p2 = p2 -> next; 
        if(p1 == NULL && p2 == NULL && p3 -> next -> val == 0)
            {p3 -> next = NULL;}
        p3 = p3 -> next;
    }
    while(p1 != NULL){
        struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
        node -> val = 0;
        node -> next = NULL;
        p3 -> next = node;
        p3 -> val += p1 -> val; 
        if(p3 -> val >= 10){
            p3 -> val -= 10;
            node -> val = 1;
        }
        
        p1 = p1 -> next;
        if(p1 == NULL && p3 -> next -> val == 0)
            p3 -> next = NULL;
        p3 = p3 -> next;
    }
    while(p2 != NULL){
        struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
        node -> val = 0;
        node -> next = NULL; 
        p3 -> next = node;
        p3 -> val += p2 -> val;       
        if(p3 -> val >= 10){
            p3 -> val -= 10;
            node -> val = 1;
        }
        p2 = p2 -> next; 
        if(p2 == NULL && p3 -> next -> val == 0)
            p3 -> next = NULL;
        p3 = p3 -> next;
    }
    return l3;
}

좋은 웹페이지 즐겨찾기