Last active
January 6, 2016 17:41
-
-
Save rdtr/de121960e6c181dc3337 to your computer and use it in GitHub Desktop.
algorithm_linked_list_add_two_numbers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Definition for singly-linked list. | |
* public class ListNode { | |
* int val; | |
* ListNode next; | |
* ListNode(int x) { val = x; } | |
* } | |
*/ | |
public class Solution { | |
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { | |
if (l1 == null && l2 == null) return null; | |
else if (l1 == null) return l2; | |
else if (l2 == null) return l1; | |
ListNode dummyHead = new ListNode(0); | |
ListNode curNode = dummyHead; | |
int co = 0; // carry-over from previous nodes | |
while (l1 != null || l2 != null) { | |
int sum = 0; | |
if (l1 != null) { | |
sum += l1.val; | |
l1 = l1.next; | |
} | |
if (l2 != null) { | |
sum += l2.val; | |
l2 = l2.next; | |
} | |
sum += co; | |
co = sum / 10; | |
sum %= 10; | |
curNode.next = new ListNode(sum); | |
curNode = curNode.next; | |
} | |
if (co == 1) curNode.next = new ListNode(1); | |
return dummyHead.next; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Definition for singly-linked list. | |
# class ListNode(object): | |
# def __init__(self, x): | |
# self.val = x | |
# self.next = None | |
class Solution(object): | |
def addTwoNumbers(self, l1, l2): | |
""" | |
:type l1: ListNode | |
:type l2: ListNode | |
:rtype: ListNode | |
""" | |
dummyHead = ListNode(0); | |
curNode = dummyHead | |
if not l1 and not l2: return None | |
elif not l1: return l2 | |
elif not l2: return l1 | |
co = 0 # carry over from the previous node | |
while l1 or l2: | |
sum = 0 | |
if l1: | |
sum += l1.val | |
l1 = l1.next | |
if l2: | |
sum += l2.val | |
l2 = l2.next | |
sum += co | |
co = sum / 10 | |
sum = sum % 10 | |
curNode.next = ListNode(sum) | |
curNode = curNode.next | |
if co == 1: | |
curNode.next = ListNode(1) | |
return dummyHead.next |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment