UCSD CSE Summer Series

Hi all!

Here with summer series updates!

Do Now! (Do one, some, or all!)

🔗 Links and Resources

The code from today’s video is also copied here for your reference:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int carry = 0;
        ListNode currentEnd = new ListNode();
        ListNode start = currentEnd;
        while (l1 != null || l2 != null) {
            int val1 = l1 == null ? 0 : l1.val;
            int val2 = l2 == null ? 0 : l2.val;
            int digitResult = val1 + val2 + carry;

            boolean isCarry = digitResult >= 10;
            int newDigit = isCarry ? digitResult - 10 : digitResult;
            carry = isCarry ? 1 : 0;

            ListNode resultNode = new ListNode(newDigit, null);
            currentEnd.next = resultNode;
            currentEnd = resultNode;

            if (l1 != null) { l1 = l1.next; }
            if (l2 != null) { l2 = l2.next; }
        }
        if (carry == 1) {
            currentEnd.next = new ListNode(1);
        }
        return start.next;
    }
}
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    int carry = 0;
    ListNode* currentEnd = malloc(sizeof(ListNode));
    ListNode* start = currentEnd;
    while(l1 != NULL || l2 != NULL) {
        int val1 = l1 == NULL ? 0 : l1->val;
        int val2 = l2 == NULL ? 0 : l2->val;
        int digitResult = val1 + val2 + carry;

        int isCarry = digitResult >= 10;
        int newDigit = isCarry ? digitResult - 10 : digitResult;
        carry = isCarry ? 1 : 0;

        ListNode* newNode = malloc(sizeof(ListNode));
        newNode->val = newDigit;
        newNode->next = NULL;
        currentEnd->next = newNode;
        currentEnd = newNode;

        if(l1 != NULL) { l1 = l1->next; }
        if(l2 != NULL) { l2 = l2->next; }
    }
    if(carry == 1) { 
        ListNode* newNode = malloc(sizeof(ListNode));
        newNode->val = 1;
        newNode->next = NULL;
        currentEnd->next = newNode;
    }
    return start->next;
}