题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
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 { // write code here if head1 == nil { return head2 } if head2 == nil { return head1 } virtualHead := &ListNode{} cur := virtualHead reverse1 := ReverseLink(head1) reverse2 := ReverseLink(head2) canary := 0 for i := 0; ; i++ { if reverse1 != nil || reverse2 != nil || canary != 0 { node := &ListNode{} var v1 int var v2 int if reverse1 != nil { v1 = reverse1.Val } else { v1 = 0 } if reverse2 != nil { v2 = reverse2.Val } else { v2 = 0 } node.Val = (v1 + v2 + canary) % 10 canary = (v1 +v2 + canary) / 10 cur.Next = node cur = cur.Next if reverse1 != nil { reverse1 = reverse1.Next } if reverse2 != nil { reverse2 = reverse2.Next } } else { break } } return ReverseLink(virtualHead.Next) } func ReverseLink(head *ListNode) *ListNode { virtural := &ListNode{} virtural.Next = head for i := 0; ; i++ { if head == nil || head.Next == nil { break } next := head.Next head.Next = next.Next next.Next = virtural.Next virtural.Next = next } return virtural.Next }