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;
}
}