package main import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */ /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ func addInList( head1 *ListNode , head2 *ListNode ) *ListNode { pHead1, pHead2 := head1, head2 if pHead1 == nil { return pHead2 } if pHead2 == nil { return pHead1 } rHead1 := reserve(pHead1) rHead2 := reserve(pHead2) res := &ListNode{Val: 0} tmp := res //进位标志 carry := 0 //相同长度相加 for rHead1 != nil && rHead2 != nil { val := rHead1.Val + rHead2.Val + carry tmp.Next = &ListNode{Val: val % 10} carry = val / 10 tmp = tmp.Next rHead1 = rHead1.Next rHead2 = rHead2.Next } //剩余长度相加 for rHead1 != nil { tmp.Next = &ListNode{Val: (rHead1.Val + carry) % 10} carry = (rHead1.Val + carry) / 10 tmp = tmp.Next rHead1 = rHead1.Next } for rHead2 != nil { tmp.Next = &ListNode{Val: (rHead2.Val + carry) % 10} carry = (rHead2.Val + carry) / 10 tmp = tmp.Next rHead2 = rHead2.Next } //进位计算 if carry != 0 { tmp.Next = &ListNode{Val: carry} } result := reserve(res.Next) return result } //反转链表 func reserve(head *ListNode) *ListNode { res := &ListNode{Val: 0} for head != nil { tmp := head.Next head.Next = res.Next res.Next = head head = tmp } return res.Next }