leetcode 2 两数相加 Go版

思路

补齐两个链表长度,然后直接开加,重点在最后一步的判断,如果加到最后标志位为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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值