Add Two Numbers II

You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contains a single digit. Add the two numbers and return them as a linked list.

You may assume the two numbers do not contain any leading zero, except the number

Example:

Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 8 -> 0 -> 7

Approach

Java


public class AddTwoNumbersII {
    public static void main(String[] args) {
        ListNode head1 = new ListNode(7);
        head1.next = new ListNode(2);
        head1.next.next = new ListNode(4);
        head1.next.next.next = new ListNode(3);

        ListNode head2 = new ListNode(5);
        head2.next = new ListNode(6);
        head2.next.next = new ListNode(4);

        ListNode newlist = addTwoNumbers(head1, head2);

        linkedListTraversal(newlist);
    }

    private static void linkedListTraversal(ListNode node) {
        while (node != null) {
            System.out.print(node.val + " ");
            node = node.next;
        }
    }

    public static ListNode reverseList(ListNode head) {
        if (head == null || head.next == null)
            return head;
        ListNode c = head;
        ListNode prev = null;
        while (c != null) {
            ListNode n = c.next;
            c.next = prev;
            prev = c;
            c = n;
        }
        return prev;
    }

    // function to add two linked list
    static ListNode addTwoNumbers(ListNode l1ListNode l2) {
        int x = 0, y = 0, z, l = 0;
        l1 = reverseList(l1);
        l2 = reverseList(l2);
        ListNode temp1 = l1;
        ListNode temp2 = l2;
        ListNode start = null;
        ListNode temp = null;

        // iterate till their is any lint
        // is not null
        while (temp1 != null || temp2 != null) {

            // if first list is not null
            if (temp1 != null) {
                x = temp1.val;
                temp1 = temp1.next;
            }
            // if first list is null
            else if (temp1 == null)
                x = 0;

            // if second list is not null
            if (temp2 != null) {
                y = temp2.val;
                temp2 = temp2.next;
            }

            // if second list is null
            else if (temp2 == null)
                y = 0;
            z = x + y + l;

            // create new ListNode
            ListNode newListNode = new ListNode(z % 10);
            newListNode.next = null;
            if (start == null) {
                start = newListNode;
                temp = start;
            } else {
                temp.next = newListNode;
                temp = temp.next;
            }
            l = z / 10;
        }
        if (l > 0) {
            ListNode newNode = new ListNode(l);
            newNode.next = null;
            temp.next = newNode;
            temp = temp.next;
        }
        start = reverseList(start);
        // return the new list head
        return start;
    }

}
class ListNode  {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int valListNode next) {
        this.val = val;
        this.next = next;
    }

}


C++

#include <bits/stdc++.h>
using namespace std;

//Struture of  node
struct Node
   int data;
   Node *next;
   Node(int data)
    {
        this->data=data;
        this->next=NULL;
    }
};

//function to reverse a linlked list
Node * reverse(Node *root)
{
    Node *temp=root,*prev=NULL,*curr=root;
        while(temp!=NULL)
        {
           curr=curr->next;
            temp->next=prev;
            prev=temp;
            temp=curr;
        }
        return prev;
}

//function to add two linked list
Node* addTwoNumbers(Node* l1Node* l2
{
    int x=0,y=0,z,l=0;
    l1=reverse(l1);
    l2=reverse(l2);
    Node *temp1=l1,*temp2=l2,*start=NULL,*temp;

    //iterate till their is any lint
    //is not null
    while(temp1!=NULL || temp2!=NULL)
     {

        //if first list is not null
       if(temp1!=NULL)
       {
        x=temp1->data;
           temp1=temp1->next;
       }
     //if first list is null
      else if(temp1==NULL
        x=0;

     //if second list is not null
     if(temp2!=NULL)
      {
       y=temp2->data;
          temp2=temp2->next;
      }

     //if second list is null
   else if(temp2==NULL)
       y=0;
       z=x+y+l;

     //create new node
     Node *newNode=new Node(z%10);
         newNode->next=NULL;
         if(start==NULL)
         {
             start=newNode;
             temp=start;
         }
         else
         {
         temp->next=newNode;
         temp=temp->next;}
     l=z/10;
     }
     if(l>0)
     {
          Node *newNode=new Node(l);
         newNode->next=NULL;
        temp->next=newNode;
         temp=temp->next;
     }
        start=reverse(start);
      //return the new list head
        return start;
}
//function to traverse a linked 
//list
void linkedListTraversal(Node *head)
{
    Node *temp=head;
    //iterate till we reach end of the linked 
    //list
    while(temp!=NULL)
     {
         //print the current
         //node data
         cout<<temp->data<<" ";
         //move to next node
         temp=temp->next;
     }
}
int main()
{
    Node *head1=new Node(7);
    head1->next=new Node(2);
    head1->next->next=new Node(4);
    head1->next->next->next=new Node(3);

    Node *head2=new Node(5);
    head2->next=new Node(6);
    head2->next->next=new Node(4);

    Node *newlist=addTwoNumbers(head1,head2);

    linkedListTraversal(newlist);
    return 0;

}


No comments:

Post a Comment