C How to Program (8th Edition)
C How to Program (8th Edition)
8th Edition
ISBN: 9780133976892
Author: Paul J. Deitel, Harvey Deitel
Publisher: PEARSON
Question
Book Icon
Chapter 12, Problem 12.6E
Program Plan Intro

Program plan:

  1. Item, start variablesare used for input. There is structure listnode having data, nextPtr member variables which represents the linked list node.
  2. void insert(node **head, int value) function inserts the node in the a linked list.
  3. node *concat(node *flist, node *slist) function concat the two linked list and return the resultant linked list.
  4. void printList(node *head) function display the contents of the linked list.

Program description:

The main purpose of the program is to perform the concatenation of two linked list by implanting the concept which is same as strcat() function of string.

Expert Solution & Answer
Check Mark

Explanation of Solution

Program:

#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <ctype.h>

//structure of node of the linked list
typedefstruct listnode
{
int data;
struct listnode *nextPtr;
} node;

//function to insert a node in a linked list
void insert(node &head,int value);
//recursive function to concate the linked list
node *concat(node *flist, node *slist);
//function to print the content of linked list
void printList(node *head);

//main starts here
void main()
{

int item;
      node *flist,*slist;
      clrscr();
//initialization of start node of linked list
      flist =NULL;
      slist =NULL;
//loop to getting input from the user for first linked list
while(1)
{
            printf("\nEnter value to insert in a First  List: 0 to End ");
            scanf("%d",&item);
//check condition to terminate while loop
if(item ==0)
break;
//insert value in a linked list
            insert(&flist, item);
}
//loop to getting input from the user for second linked list
while(1)
{
            printf("\nEnter value to insert in a Second List: 0 to End ");
            scanf("%d",&item);
//check condition to terminate while loop
if(item ==0)
break;
//insert value in a linked list
            insert(&slist, item);
}

// print the contents of linked list
      printf("\n Content of First List are as follows : ");
      printList(flist);
// print the contents of linked list
      printf("\n Content of Second List are as follows : ");
      printList(slist);
//call the function to reverse the linked list
// and store the address of first node
      flist = concat(flist, slist);

//print the contents of concated list
      printf("\n Concatenated List contents are as follows : ");
      printList(flist);
      getch();
}


//function definition to insert node in a linked list
void insert(node &head,int value)
{
      node *ptr,*tempnode;
//memory allocation for the new node
      ptr = malloc(sizeof(node));
//copy the value to the new node
      ptr->data = value;
//set node's pointer to NULL
      ptr->nextPtr =NULL;

//if the list is empty
if(*head ==NULL)
//make the first node
*head = ptr;

else
{
//copy the address of first node
            tempnode =*head;
//traverse the list using loop until it reaches
//to the last node
while(tempnode->nextPtr !=NULL)
                  tempnode = tempnode->nextPtr;
//make the new node as last node
            tempnode->nextPtr = ptr;
}


}

//function defintion to concat the list
node *concat(node *flist, node *slist)
{
      node *ptr;
//check if list is empty
if(flist ==NULL|| slist ==NULL)
{
            printf("\none of the lists is empty");
//return the node
returnNULL;
}
else
{
//store first node address
            ptr = flist;
//traverse list until last node is not encountered
while(ptr->nextPtr !=NULL)
                  ptr = ptr->nextPtr;
//store the address of first node of second list
            ptr->nextPtr = slist;
}

//return new list
return flist;
}


//function definition to display linked list contents
void printList(node *head)
{
      node *ptr;
//stores the address of first node
      ptr = head;
//traverse the list until it reaches to the NULL
while(ptr !=NULL)
{
//print the content of current node
            printf("%d ", ptr->data);
//goto the next node
            ptr = ptr->nextPtr;
}
}

Explanation:In the above code, a structure is created which represents the node of the linked list. Two starting nodes are initialized which contains the address of first node of each list. User is asked to enter the values for first linked list and linked list is created using insert() function by passing the starting pointer and value. This process is repeated to create the second linked list. printList() function is used to display the contents of both lists. Both lists are concatenated using the concat() function by passing the both list. In this function first list is traversed up to last node and then last node pointer points to the first node of second list. Starting node address is returned and stored in the pointer. Finally, concatenated list is displayed using printList() function.

Sample output:

  C How to Program (8th Edition), Chapter 12, Problem 12.6E

Want to see more full solutions like this?

Subscribe now to access step-by-step solutions to millions of textbook problems written by subject matter experts!
Students have asked these similar questions
(True/False): Arrays are passed by reference to avoid copying them onto the stack
[ ] [] power In the cell below, you are to write a function "power(list)" that takes in a list as its input, and then returns the power set of that list. You may assume that the input will not have any duplicates (i.e., it's a set). After compiling the above cell, you should be able to compile the following cell and obtain the desired outputs. print (power ( ["A", "B"]), power ( ["A", "B", "C"])) + Code + Markdown This should return [[], ["A"], ["B"], ["A", "B"]] [[], ["A"], ["B"], ["C"], ["A", "B"], ["A", "C"], ["B", "C"], ["A", "B", "C"]] (the order in which the 'sets' appear does not matter, just that they are all there) Python Python
Topic: Singly Linked ListImplement the following functions in C++ program. Read the question carefully. Below is the "CODE THAT NEEDS TO BE IMPROVED" or "NOT FINAL CODE"  (See attached photo for reference)  bool addAt(int num, int pos) This method will add the integer num to the posth position of the list and returns true if the value of pos is valid. Performing addAt(20, 2) in the example list will add 20 at the 2nd position and the linked list will now look like this: 10 -> 20 -> 30 -> 40 -> 50. When the value of pos is invalid i.e. greater than the size + 1 or less than one, return false.   bool addAt(int num, int pos) {             if (pos == 1) { // case 1: addHead                 addHead(num);                 return true;             }             if (pos == index + 1) { // case 3: addTail                 addTail(num);                 return true;             }             node* currnode = head; //addAt(20, 3)             int count = 0;             while (currnode…
Knowledge Booster
Background pattern image
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
Database System Concepts
Computer Science
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:McGraw-Hill Education
Text book image
Starting Out with Python (4th Edition)
Computer Science
ISBN:9780134444321
Author:Tony Gaddis
Publisher:PEARSON
Text book image
Digital Fundamentals (11th Edition)
Computer Science
ISBN:9780132737968
Author:Thomas L. Floyd
Publisher:PEARSON
Text book image
C How to Program (8th Edition)
Computer Science
ISBN:9780133976892
Author:Paul J. Deitel, Harvey Deitel
Publisher:PEARSON
Text book image
Database Systems: Design, Implementation, & Manag...
Computer Science
ISBN:9781337627900
Author:Carlos Coronel, Steven Morris
Publisher:Cengage Learning
Text book image
Programmable Logic Controllers
Computer Science
ISBN:9780073373843
Author:Frank D. Petruzella
Publisher:McGraw-Hill Education