Home » Interview Questions » Interviews » Story Details
Printable Version

Interview Question: Add numbers given in the form of Linked List

by Kamal Rawat on Dec 30, 2011

Two numbers are given in the form of Linked List (may have different no. of digits). write an algorithm to add these two numbers
Comments: 0    Views: 909

MCN Professionals | Interview Question of the day

MCN Professionals is starting Industrial Training for MCA-2012 Batch. Have a look at our Industrial Training Program and Course Details.
-----------------------------------------------------------------------------------------------------------------------------------------

Today's Question:

Two numbers are given in the form of linked list (with each node storing one digit), like below:

Number1: 1 -> 2 -> 4                (Number: 124)        
Number2: 1 -> 0 -> 2 -> 3 -> 4      (Number: 10234)

Write an algorithm which will compute the sum of these two linked list. The result should be a linked list as below:

Sum: 1 -> 0 -> 3 -> 5 -> 8          (Number: 10358)


Solution:

The problem is because during addition, we add from the least significant bits:

sum LL.jpg


There are multiple solutions to solve this problem:

Method1:  Reverse the lists

Algorithm:   
    Step1: Reverse list1
    Step2: Reverse list2
    Step3: add list1 & list2 from forward direction and keep adding the new element at the front of result list.

For example:

If the original lists are 
Num1: 1 -> 2 -> 4
Num2: 1 -> 0 -> 2 -> 3 -> 4

Reversing the lists
Num1: 4 -> 2 -> 1
Num2: 4 -> 3 -> 2 -> 0 -> 1

Adding the lists
Num1: 4 -> 2 -> 1
Num2: 4 -> 3 -> 2 -> 0 -> 1

Sum:  8 -> 5 -> 3 -> 0 -> 1

Reverse the Sum list to get the actual sum:
Sum:  1 -> 0 -> 3 -> 5 -> 8

Note that we don't need the last step if we keep inserting at the head of the list in the previous step.

Node* computeSum(Node* num1, Node* num2)
{
    // If any of the list is null return the other list 
    if(!num1)
        return num2;
    else if(!num2)
        return num1; 

    // Reversing the two list
    reverse(num1);
    reverse(num2);

    Node * sum = NULL;
    Node * temp = NULL;
    int carry = 0;        // variable to hold carry of sum.

    while(num1 && num2)
    {
        int tempSum = (carry + num1->data + num2->data) % 10;
        carry = (carry + num1->data + num2->data) / 10;

        if(! sum)
            temp = sum = new Node(tempSum); // sum will point to the head of result list
        }else{
            temp->link = new Node(tempSum);
            temp = temp->link;
        }
    }

    // Adding the remaining list to the end of result list
    if(num1)
        temp->link = num1;
    else
        temp->link = num2;

    // Reversing the result list
    reverse(sum);
    return sum;
}

Method 2: using Stacks

This algorithm does not require us to reverse the list. Following are the steps:

Algorithm:

    Step1: Push all the nodes of num1 in Stack1
    Step2: Push all the nodes of num2 in Stack2
    Step3: Keep popping the elements from two stacks and adding them and inserting them in the result list.

---------------------------------------------------------------------------

Interview Questions Archive:

         To see all the questions in the category click here...

Post a Comment
*
DevExpress PowerBuilder Web Development Windows Development Languages Software Engineering Databases
iPhone Architecture Secutiry UML & Modeling Operating Systems Networking Testing
Graphics Design Project Management Hardware Open Source Games Development Business Intelligence Visual Studio LightSwitch 2011
MonoDevelop Visual Studio 2010 ASP.NET HTML, DHTML XML PHP JavaScript
Silverlight Web Services WCF Windows Forms WPF Windows Services Dynamic Link Libraries
ActiveX COM, DCOM, ATL C# VB.NET C++ F# Java
Pascal SQL Server Oracle DB2 MS-Access Windows Servers Windows
Linux Unix SAP LINQ .NET Framework ADO.NET Reporting
Crystal Reports SQL Server Reporting Services Igenda Reports Active Reports Adobe Fireworks Arrays & Collections Hosting
Future Trends Android Windows Phone Smart Devices Business M&A Investment & Funding
Web Browsers Internet Explorer Firefox Safari Common Entrepreneurs Students
Consulting Wiki Gadgets MobileMe iCloud iOS Social Media
Facebook Twitter LinkedIn Google+ Microsoft Kinect XBox
Wii Playstation DirectX i OS OS X CIO, CTO, CEO Windows 8
Web Design Expression Blend 4 Photoshop CS5 Creative Suite 5.5 Expression Web 4 Expression Studio 4 Creative Suite® 5.5 Design
Creative Suite 5.5 Web Creative Suite 5.5 Production Startups Funding M&A Laptops Smart Phones
Desktops Cameras & Camcorders Netbooks Tablets Virtualization Microsoft Surface WordPress
Software Products Cloud Computing Current Affairs Technology TV TV
Earnings XAML E-Commerce MonoTouch Mono for Android Deals Electronics
Mobile Phone Laptop Tablet Book Computer Press Releases Reviews
Products Books Companies Windows Azure SQL Azure Interviews Mac
Web Browsers Symbian Windows Forms WPF Windows Services HTML 5 Office 365
SharePoint 2010 Exchange Server Adobe Visual Studio 2012 iPad Flex / Flash Games
Windows 9
X
 Login
Please login to submit a new post, reply and edit exiting posts, see user profiles, and access more features. If you are not a registered member, Register here.
User Id / Email:
Password:  
Forgot Password | Forgot UserName