题解 | #链表相加(二)#
链表相加(二)
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
}


