
题目
预先指针 pre,该指针的下一个节点指向真正的头结点head。使用预先指针的目的在于链表初始化时无可用节点值,而且链表构造过程需要指针移动,进而会导致头指针丢失,无法返回结果。 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//新链表的头的前一个结点
ListNode pre = new ListNode(0);
//当前要更新的链表位置
ListNode curr = pre;
//进位值
int carry=0;
while (l1 != null || l2 != null) {
int a = l1 == null ? 0 : l1.val;
int b = l2 == null ? 0 : l2.val;
int sum=a+b+carry;
carry=sum/10;
sum=sum%10;
curr.next=new ListNode(sum);
curr=curr.next;
if (l1!=null){
l1=l1.next;
}
if (l2!=null){
l2=l2.next;
}
}
//两个链表都遍历完了之后,如果有进位1,则补一个进位
if (carry==1){
curr.next=new ListNode(carry);
}
return pre.next;
}