本题忽悠能力很强,需要我们仔细考虑 没有涉及到什么什么算法,只不过就是链表的操作。
题意为
给两个链表,每个链表有两个元素,一个是存储的值,另一个是下一个结点的指针。我们需要做的操作就是遍历这两个链表然后把值相加,如果有进位的话也要处理进位。
值得注意的一点就是不要让指针为空,和链表长度不同的处理。还有就是如果最后有进位的话就新建一个结点放在最后就好。说什么反向数字我觉得就是坑。还不如直接说链表。
c#也可以用指针的但是要配置什么什么变量什么什么什么编译器就没弄。
c# code
/**
* Definition for singly-linked list.
* public class ListNode
*{
* public int val;
* public ListNode next;
* public ListNode(int x)
* {
* val = x;
* }
* }
*/
public class Solution {
public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
{
if (l1 == null) return l2;
if (l2 == null) return l2;
ListNode ret = l1;
int carry=0;
while(l1.next!=null&&l2.next!=null)
{
l1.val = l1.val + l2.val + carry;
carry = l1.val / 10;
l1.val = l1.val % 10;
l2 = l2.next;
l1 = l1.next;
}
l1.val = l1.val + l2.val + carry;
carry = l1.val / 10;
l1.val = l1.val % 10;
if (l1.next != null)
{
l1 = l1.next;
while (l1.next != null)
{
l1.val += carry;
carry = l1.val / 10;
l1.val = l1.val % 10;
l1 = l1.next;
}
l1.val += carry;
carry = l1.val / 10;
l1.val = l1.val % 10;
if (carry > 0)
{
l1.next = new ListNode(carry);
}
}
else if (l2.next != null)
{
l1.next = l2.next;
l1 = l1.next;
while (l1.next != null)
{
l1.val += carry;
carry = l1.val / 10;
l1.val = l1.val % 10;
l1 = l1.next;
}
l1.val += carry;
carry = l1.val / 10;
l1.val = l1.val % 10;
if (carry > 0)
{
l1.next = new ListNode(carry);
}
}
else
{
if (carry > 0)
{
l1.next = new ListNode(carry);
}
}
return ret;
}
}