题解 | #链表相加(二)#

链表相加(二)

http://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b



// 反转链表 + 注意补位
func addInList( head1 *ListNode ,  head2 *ListNode ) *ListNode {
    // write code here
    node1, size1 := Reverse(head1)
    node2, size2 := Reverse(head2)
    
    long := &ListNode{0,nil}
    head := long 
    if size1 >= size2 {
        long.Next = node1 
    } else {
        long.Next = node2  
    }
    
    var upBit int = 0
    var tmp int = 0 
    for node1 != nil || node2 != nil {
        if node1 != nil {
            tmp += node1.Val
            node1 = node1.Next
        }
        if node2 != nil {
            tmp += node2.Val
            node2 = node2.Next
        }
        tmp += upBit 
        upBit = tmp / 10 
        long.Next.Val = tmp % 10
        long = long.Next
        tmp = 0 
    }
    
    if upBit != 0 {
        long.Next = &ListNode{upBit, nil}
    }
    
    rev, _ := Reverse(head.Next)
    return rev 
}

func Reverse(head *ListNode) (*ListNode, int) {
    var prev, next  *ListNode
    var size int = 0 
    for (head != nil) {
        size++
        next = head.Next
        head.Next = prev 
        prev = head 
        head = next 
        
    }
    return prev, size 
}


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务