题解 | #链表相加(二)#
链表相加(二)
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 } r1 := reverseList(head1) //反转 r2 := reverseList(head2) //反转 dummy := new(ListNode) //新建 cur := dummy //头,用作后续反转 plus := 0 //进位器 for r1 != nil && r2 != nil { //等长情况下 tmp := r1.Val + r2.Val + plus //相加,进位 if tmp >= 10 { tmp = tmp % 10 plus = 1 //进位 } else { plus = 0 } dummy.Next = new(ListNode) //下个节点存当前数,后续直接用next返回链表,不然会多一个0头 dummy.Next.Val = tmp r1 = r1.Next //进位 r2 = r2.Next//进位 dummy = dummy.Next //进位 } var r3 *ListNode if r1 != nil { r3 = r1 } if r2 != nil { r3 = r2 } for r3 != nil { //多余长度的链表 tmp := r3.Val + plus //相同操作 if tmp >= 10 { tmp = tmp % 10 plus = 1 } else { plus = 0 } dummy.Next = new(ListNode) dummy.Next.Val = tmp r3 = r3.Next dummy = dummy.Next } if plus >= 1 { dummy.Next = new(ListNode) //新建进位 dummy.Next.Val = plus } return reverseList(cur.Next) //去除0头,并反转 } func reverseList(lists *ListNode) *ListNode { //反转链表 var pre, cur *ListNode for lists != nil { //不要用next cur = lists //当前 lists = lists.Next //移入下一个 cur.Next = pre //指向前一个 pre = cur //进位 } return cur }