思路
补齐两个链表长度,然后直接开加,重点在最后一步的判断,如果加到最后标志位为1,那么需要再分配一个节点,并赋值为1.
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
current1 := l1;
current2 := l2;
count1, count2 := 0, 0;
for current1 != nil {
count1++;
current1 = current1.Next;
}
for current2 != nil {
count2++;
current2 = current2.Next;
}
current1 = l1;
current2 = l2;
if count1 > count2 { //补够一样的长度
diff := count1 - count2;
for current2.Next != nil {
current2 = current2.Next;
}
for i := 0; i < diff; i++ {
current2.Next = new(ListNode);
current2.Next.Val = 0;
current2 = current2.Next;
}
current2.Next = nil;
} else if (count1 < count2) {
diff := count2 - count1;
for current1.Next != nil {
current1 = current1.Next;
}
for i := 0; i < diff; i++ {
current1.Next = new(ListNode);
current1.Next.Val = 0;
current1 = current1.Next;
}
current1.Next = nil;
} else {
;
}
//补够长度,开始相加
current1 = l1;
current2 = l2;
var prev *ListNode = nil;
carry := 0;
for current1 != nil && current2 != nil {
if (current1.Val + current2.Val + carry) < 10 {
current1.Val = (current1.Val + current2.Val + carry) % 10;
carry = 0;
} else {
current1.Val = (current1.Val + current2.Val + carry) % 10;
carry = 1;
}
if current1.Next == nil {
prev = current1;
}
current1 = current1.Next;
current2 = current2.Next;
}
if carry == 1 {
prev.Next = new(ListNode);
prev.Next.Val = 1;
prev.Next.Next = nil;
}
return l1;
}