一道很普通的链表题,只要注意长短不同和进位的问题就可以了,遍历一遍就可以得出结果。
public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
{
ListNode prevListNode = null;//初始化参数
int sum = 0;
int carry = 0;
ListNode n1 = l1, n2 = l2, n3 = null;
while (n1 != null || n2 != null)//当两个表都遍历完后结束
{
sum = (n1 == null ? 0 : n1.val) + (n2 == null ? 0 : n2.val) + carry;
carry = sum / 10;
ListNode newListNode = new ListNode(sum % 10);
if (prevListNode == null)
{
prevListNode = newListNode;
n3 = newListNode;//获得新链表的头
}
else
{
prevListNode.next = newListNode;//拼接链表
prevListNode = newListNode;
}
n1 = n1?.next;
n2 = n2?.next;
}
if (carry != 0)//最后可能carry有进位,比如9+1的情况
{
prevListNode.next = new ListNode(carry);
}
return n3;
}