2 Add Two Numbers

链表的基本操作,注意记录carry, while循环需要写上循环出来的条件,第一遍循环结束之后,记录下rest, 使用哑结点,方便之后的操作,可以避免判断, 时间复杂度O(n)

Python

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        cur, carry = 0, 0
        head = ListNode(0)
        curNode = head

        while l1 or l2:
            x = l1.val if l1 else 0
            y = l2.val if l2 else 0
            cur = x + y + carry
            carry = cur / 10
            cur = cur % 10 
            curNode.next = ListNode(cur)
            curNode = curNode.next
            if l1:
                l1 = l1.next
            if l2: 
                l2 = l2.next

        if carry:
            curNode.next = ListNode(carry)
            curNode = curNode.next

        return head.next

Java

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummyHead = new ListNode(0);
        ListNode p = l1, q = l2, curr = dummyHead;
        int carry = 0;
        while(p != null || q != null){
            int x = (p!=null) ? p.val: 0;
            int y = (q!=null) ? q.val: 0;
            int sum = x + y + carry;
            carry = sum / 10;
            curr.next = new ListNode(sum % 10);
            curr = curr.next;
            if(p!= null) 
                p = p.next;
            if(q!= null)
                q = q.next;
        }
        if (carry > 0){
            curr.next = new ListNode(carry);
        }
        return dummyHead.next;

    }
}

results matching ""

    No results matching ""