Q16 Add Two Numbers II - LeetCode
Tue Jan 17 2023 05:57:17 GMT+0000 (Coordinated Universal Time)
Saved by
@Ayush_dabas07
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverse(ListNode head)
{
ListNode prev = null;
ListNode next = null;
ListNode current = head;
while(current != null){
next = current.next;
current.next = prev ;
prev = current;
current = next;
}
return prev;
}
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//reverse the ll
ListNode curr1 = reverse(l1);
ListNode curr2 = reverse(l2);
//make a dummy head for answer LL
ListNode dummyhead = new ListNode(-1);
ListNode dummy = dummyhead;
int carry = 0;
//add two numbers like normal
while(curr1 != null && curr2 != null){
int val = curr1.val + curr2.val + carry ;
carry = val/10;
val = val%10;
ListNode temp = new ListNode(val);
dummy.next = temp;
dummy = dummy.next;
curr1 = curr1.next;
curr2 = curr2.next;
}
//if one LL ends add the rest of the number of the other LL along with carry
while(curr1 != null){
int val = curr1.val + carry ;
carry = val/10;
val = val%10;
ListNode temp = new ListNode(val) ;
dummy.next = temp;
dummy = dummy.next;
curr1 = curr1.next;
}
while(curr2 != null){
int val = curr2.val + carry ;
carry = val/10;
val = val%10;
ListNode temp = new ListNode(val) ;
dummy.next = temp;
dummy = dummy.next;
curr2 = curr2.next;
}
//if all numbers are done and still any carry remains make a new node and add to the LL
if(carry >0){
ListNode temp = new ListNode(carry) ;
dummy.next = temp;
dummy = dummy.next;
}
//re-reverse the final answer LL
return reverse(dummyhead.next);
}
}
content_copyCOPY
https://leetcode.com/problems/add-two-numbers-ii/
Comments