Skip to content

Instantly share code, notes, and snippets.

@lkrych
Created May 23, 2018 02:09
Show Gist options
  • Save lkrych/17ddedc5502250a4efd2a5713faf2b21 to your computer and use it in GitHub Desktop.
Save lkrych/17ddedc5502250a4efd2a5713faf2b21 to your computer and use it in GitHub Desktop.
solution for more optimized link_list
func optimizedAddTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
carry := 0
sum := 0
//this is the starting node, we need to return this
head := ListNode{
Val: 0,
Next: nil,
}
//create a current node to save to
var currentNode *ListNode
currentNode = &head
forLoop:
for l1 != nil || l2 != nil { //as long as both lists are not empty keep looping
intermediate := 0
switch {
case l1 != nil && l2 != nil:
intermediate = (l1.Val + l2.Val + carry)
sum = intermediate % 10
carry = intermediate / 10
l1 = l1.Next
l2 = l2.Next
case l1 != nil:
intermediate = (l1.Val + carry)
sum = intermediate % 10
carry = intermediate / 10
l1 = l1.Next
case l2 != nil:
intermediate = (l2.Val + carry)
sum = intermediate % 10
carry = intermediate / 10
l2 = l2.Next
default:
intermediate = carry
sum = intermediate % 10
carry = intermediate / 10
}
currentNode.Val = sum //save the sum to the currentNode
nextNode := ListNode{ //initiate a nextNode
Val: 0,
Next: nil,
}
//breaking logic
switch {
case l1 == nil && l2 == nil && carry == 0: //if both numbers are nil, break out
break forLoop
case l1 == nil && l2 == nil && carry != 0: //if there is a carry but both nodes are nil, it needs to be added to the nextNode
currentNode.Next = &nextNode
currentNode = &nextNode
currentNode.Val = carry
break forLoop
}
currentNode.Next = &nextNode //if there are still nodes to explore set currentNode to equal nextNode
currentNode = &nextNode
}
return &head
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment