diff options
Diffstat (limited to 'racket/leetcode/lc-2-add-two-numbers.rkt')
-rw-r--r-- | racket/leetcode/lc-2-add-two-numbers.rkt | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/racket/leetcode/lc-2-add-two-numbers.rkt b/racket/leetcode/lc-2-add-two-numbers.rkt new file mode 100644 index 0000000..8062817 --- /dev/null +++ b/racket/leetcode/lc-2-add-two-numbers.rkt @@ -0,0 +1,35 @@ +#lang racket +; Definition for singly-linked list: + + +; val : integer? +; next : (or/c list-node? #f) +(struct list-node + (val next) #:mutable #:transparent) + +; constructor +(define (make-list-node val [next-node #f]) + (list-node val next-node)) + + +(define/contract (add-two-numbers l1 l2) + (-> (or/c list-node? #f) (or/c list-node? #f) (or/c list-node? #f)) + (define (process-list node [acc '()]) + (if (list-node-next node) + (process-list (list-node-next node) (cons (list-node-val node) acc)) + (cons (list-node-val node) acc))) + (define sum-of-lists (+ (string->number (apply ~a (process-list l1))) + (string->number (apply ~a (process-list l2))))) + (define sum-list-digits + (reverse + (map (λ (x) (string->number (string x))) + (string->list (number->string sum-of-lists))))) + (define (build-list l) + (if (empty? l) + #f + (make-list-node (car l) (build-list (cdr l))))) + (build-list sum-list-digits)) + +(define list1 (make-list-node 2 (make-list-node 4 (make-list-node 3)))) +(define list2 (make-list-node 5 (make-list-node 6 (make-list-node 4)))) +(add-two-numbers list1 list2)
\ No newline at end of file |