给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
# 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
"""
head = ListNode(0)
# 创建三个指针
p = l1;q = l2;L = head
c = 0 # 表示进位
while p!=None or q!=None:
x = p.val if p!=None else 0
y = q.val if q!=None else 0
sum = c + x + y
c = sum // 10
L.next = ListNode(sum%10)
L = L.next
if p!=None :
p = p.next
if q!=None :
q = q.next
if c>0:
L.next = ListNode(c)
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 head = new ListNode(0);
ListNode p = l1,q = l2,node = head;
int c = 0;
while(p!=null||q!=null){
//这里避免了一个链表已经遍历到头
int x = (p!=null)?p.val:0;
int y = (q!=null)?q.val:0;
int sum = c + x + y;
c = sum/10;
node.next =new ListNode(sum%10);
node = node.next;
if(q!=null) q=q.next;
if(p!=null) p=p.next;
}
if(c>0){
node.next = new ListNode(c);
}
return head.next;
}
}