C Program To Add Two Numbers Represented By Linked Lists- Set 1 Last Updated : 29 Mar, 2023 Summarize Comments Improve Suggest changes Share Like Article Like Report Given two numbers represented by two lists, write a function that returns the sum list. The sum list is a list representation of the addition of two input numbers. Example: Input: List1: 5->6->3 // represents number 563 List2: 8->4->2 // represents number 842 Output: Resultant list: 1->4->0->5 // represents number 1405 Explanation: 563 + 842 = 1405 Input: List1: 7->5->9->4->6 // represents number 75946 List2: 8->4 // represents number 84 Output: Resultant list: 7->6->0->3->0// represents number 76030 Explanation: 75946+84=76030Recommended: Please solve it on "PRACTICE" first, before moving on to the solution. Approach: Traverse both lists and One by one pick nodes of both lists and add the values. If the sum is more than 10 then make carry as 1 and reduce sum. If one list has more elements than the other then consider the remaining values of this list as 0. The steps are: Traverse the two linked lists from start to endAdd the two digits each from respective linked lists.If one of the lists has reached the end then take 0 as its digit.Continue it until both the end of the lists.If the sum of two digits is greater than 9 then set carry as 1 and the current digit as sum % 10 Below is the implementation of this approach. C // C program to implement the // above approach #include <stdio.h> #include <stdlib.h> // Linked list node struct Node { int data; struct Node* next; }; /* Function to create a new node with given data */ struct Node* newNode(int data) { struct Node* new_node = (struct Node*)malloc(sizeof(struct Node)); new_node->data = data; new_node->next = NULL; return new_node; } /* Function to insert a node at the beginning of the Singly Linked List */ void push(struct Node** head_ref, int new_data) { // Allocate node struct Node* new_node = newNode(new_data); // Link the old list of the new node new_node->next = (*head_ref); // Move the head to point to the // new node (*head_ref) = new_node; } /* Adds contents of two linked lists and return the head node of resultant list */ struct Node* addTwoLists(struct Node* first, struct Node* second) { // res is head node of the resultant // list struct Node* res = NULL; struct Node *temp, *prev = NULL; int carry = 0, sum; // while both lists exist while (first != NULL || second != NULL) { // Calculate value of next digit in // resultant list. The next digit is // sum of following things // (i) Carry // (ii) Next digit of first // list (if there is a next digit) // (ii) Next digit of second // list (if there is a next digit) sum = carry + (first ? first->data : 0) + (second ? second->data : 0); // Update carry for next calculation carry = (sum >= 10) ? 1 : 0; // Update sum if it is greater than 10 sum = sum % 10; // Create a new node with sum as data temp = newNode(sum); // If this is the first node then // set it as head of the resultant // list if (res == NULL) res = temp; // If this is not the first node // then connect it to the rest. else prev->next = temp; // Set prev for next insertion prev = temp; // Move first and second pointers to // next nodes if (first) first = first->next; if (second) second = second->next; } if (carry > 0) temp->next = newNode(carry); // return head of the resultant list return res; } // A utility function to print a // linked list void printList(struct Node* node) { while (node != NULL) { printf("%d ", node->data); node = node->next; } printf(""); } // Driver code int main(void) { struct Node* res = NULL; struct Node* first = NULL; struct Node* second = NULL; // Create first list 7->5->9->4->6 push(&first, 6); push(&first, 4); push(&first, 9); push(&first, 5); push(&first, 7); printf("First List is "); printList(first); // Create second list 8->4 push(&second, 4); push(&second, 8); printf("Second List is "); printList(second); // Add the two lists and see result res = addTwoLists(first, second); printf("Resultant list is "); printList(res); return 0; } Output: First List is 7 5 9 4 6 Second List is 8 4 Resultant list is 5 0 0 5 6 Complexity Analysis: Time Complexity: O(m + n), where m and n are numbers of nodes in first and second lists respectively. The lists need to be traversed only once.Auxiliary Space: O(1). Please refer complete article on Add two numbers represented by linked lists | Set 1 for more details! Comment More infoAdvertise with us Next Article Javascript Program For Adding 1 To A Number Represented As Linked List K kartik Follow Improve Article Tags : C Language Linked Lists Microsoft Amazon Flipkart Qualcomm Snapdeal Accolite MakeMyTrip +5 More Practice Tags : AccoliteAmazonFlipkartMakeMyTripMicrosoftQualcommSnapdeal +3 More Similar Reads Add Two Numbers Represented as Linked List Given two numbers represented as two lists, the task is to return the sum of two lists. Note: There can be leading zeros in the input lists, but there should not be any leading zeros in the output list.Examples:Input: num1 = 4 -> 5, num2 = 3 -> 4 -> 5Output: 3 -> 9 -> 0 Explanation: S 15+ min read Subtract Two Numbers represented as Linked Lists Given two linked lists that represent two large positive numbers. Subtract the smaller number from the larger one and return the difference as a linked list. Note that the input lists may be in any order, but we always need to subtract smaller ones from larger ones.Note: It may be assumed that there 15+ min read Javascript Program For Adding 1 To A Number Represented As Linked List Number is represented in linked list such that each digit corresponds to a node in linked list. Add 1 to it. For example 1999 is represented as (1-> 9-> 9 -> 9) and adding 1 to it should change it to (2->0->0->0) Below are the steps : Reverse given linked list. For example, 1-> 5 min read Add 1 to a number represented as linked list A number is represented in linked list such that each digit corresponds to a node in linked list. The task is to add 1 to it. Examples:Input: head: 4 -> 5 -> 6Output: head: 4 -> 5 -> 7Explanation: Adding 1 to number represented by Linked List = 456 + 1 = 457 Input: head: 2 -> 1 -> 15+ min read Add Two Numbers represented as Linked List using Recursion Given two numbers represented as two lists, the task is to return the sum of two lists using recursion. Note: There can be leading zeros in the input lists, but there should not be any leading zeros in the output list.Examples:Input: num1 = 4 -> 5, num2 = 3 -> 4 -> 5Output: 3 -> 9 -> 14 min read Subtract 1 from a number represented as Linked List Given the head of the linked list representing a positive integer, the task is to print the updated linked list after subtracting 1 from it. Examples: Input: LL = 1 -> 2 -> 3 -> 4Output: 1 -> 2 -> 3 -> 3 Input: LL = 1 -> 2Output: 1 -> 1 Approach: The given problem can be solv 15+ min read Like