C++ program to fold a linked list
How to fold a linked list?
Folding a linked list is like joining the two end of the linked list, and merging them together. In this article, we will learn that what does Folding a Linked List means, and what steps and algorithm we need to follow to perform the following task. Let’s see how to code a C++ Program for folding a Linked List.
Steps to write a C++ program to fold a linked list
To fold a linked list following steps are followed
- Define the linked list.
- In the main method call all the method you have declared with input/output statement you want to use.
- In the method fold multiple process are going on.
- First we are finding middle of the linked using slow and fast pointer trick.
- Now we will divide the linked list into two half
- Second we are reversing the linked list from middle to tail i.e. second half of the list.
- Later we will print each element of both the list one by one.
How to construct a linked list ?
class Node
{
int data;
Node *next;
};
Algorithm to fold a linked list in C++
- WHILE(HEAD1||HEAD2)
- IF(HEAD1)
- CURR->NEXT=HEAD1
- CURR=CURR->NEXT
- HEAD1=HEAD1->NEXT
- END IF
- IF(HEAD2)
- CURR->NEXT=HEAD2
- CURR=CURR->NEXT
- HEAD2=HEAD2->NEXT
- END IF & WHILE
- HEAD=HEAD->NEXT
Program to fold a linked list in C++
Run
#include<bits/stdc++.h> using namespace std; //constructing the structure of a node struct node { int data; struct node *next; }; //declaring the prototype of the functions that we are going to use void build (struct node **head, int data); void display (struct node *head); struct node *newNode (int data); void fold (node ** head); void reverselist (node ** head); int main (void) //main method. { int n, k; cout<< "Enter size of linked list\n"; cin>>n; int data[100]; cout << "Enter linked list data\n"; for (int i = 0; i < n; i++) { cin >> data[i]; } struct node *head = NULL; //constructing linked list for (int i = n - 1; i >= 0; i--) build (&head, data[i]); cout << "\nLinked List Data: "; display (head); fold (&head); cout << "\nLinked list after folding\nLinked List Data: "; display (head); return 0; } void build (struct node **head, int data) //fuction to build the linked list { struct node *newNode = (struct node *) malloc (sizeof (struct node)); newNode->data = data; newNode->next = *head; *head = newNode; } void display (struct node *head) //displaying the linked List { struct node *ptr = head; while (ptr) { cout << ptr->data << " "; ptr = ptr->next; } } struct node *newNode (int data) //allocating memory to a new node(dummy node) { struct node *newNode = (struct node *) malloc (sizeof (struct node)); newNode->data = data; newNode->next = NULL; return newNode; } void fold (node ** head) //function for rearranging the node { node *slow = *head, *fast = slow->next; while (fast && fast->next) { slow = slow->next; fast = fast->next->next; } struct node *head1 = *head; struct node *head2 = slow->next; slow->next = NULL; //slow pointer will be at middle position reverselist (&head2); //reversing second half of the list *head = newNode (0); // Assign dummy Node node *curr = *head; while (head1 || head2) { if (head1) { curr->next = head1; curr = curr->next; head1 = head1->next; } if (head2) { curr->next = head2; curr = curr->next; head2 = head2->next; } } *head = (*head)->next; } //function for reversing the List void reverselist (node ** head) { node *prev = NULL, *curr = *head, *next; while (curr) { next = curr->next; curr->next = prev; prev = curr; curr = next; } *head = prev; }
Output: Enter size of linked list 5 Enter linked list data 14 56 25 31 54 Linked List Data: 14 56 25 31 54 Linked list after folding Linked List Data: 14 54 56 31 25
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Get over 200+ course One Subscription
Courses like AI/ML, Cloud Computing, Ethical Hacking, C, C++, Java, Python, DSA (All Languages), Competitive Coding (All Languages), TCS, Infosys, Wipro, Amazon, DBMS, SQL and others
Singly Linked List
- Introduction to Linked List in Data Structure
Click Here - Linked List in –
- Singly Linked List in –
- Insertion in singly Linked List –
- Insertion at beginning in singly Linked List –
- Insertion at nth position in singly Linked List –
- Insertion at end in singly Linked List –
- Deletion in singly Linked List –
- Deletion from beginning in singly linked list :
- Deletion from nth position in singly linked list :
- Deletion from end in singly linked list :
- Linked List Insertion and Deletion –
C | C++ | Java - Reverse a linked list without changing links between nodes (Data reverse only) –
C | C++ | Java - Reverse a linked list by changing links between nodes –
- Print reverse of a linked list without actually reversing –
- Print reverse of a linked list without actually reversing –
- Insertion in the middle Singly Linked List –
- Insertion in a Sorted Linked List –
- Delete alternate nodes of a Linked List –
- Find middle of the linked list –
- Reverse a linked list in groups of given size –
- Find kth node from end of the linked list –
- Append the last n nodes of a linked list to the beginning of the list –
- Check whether linked list is palindrome or not –
- Fold a Linked List –
- Insert at given Position –
- Deletion at given Position –
Singly Linked List
- Introduction to Linked List in Data Structure
- Linked List in – C | C++ | Java
- Singly Linked List in – C | C++ | Java
- Insertion in singly Linked List – C | C++ | Java
- Deletion in singly Linked List – C | C++ | Java
- Reverse a linked list without changing links between nodes (Data reverse only) – C | C++ | Java
- Linked List Insertion and Deletion – C | C++ | Java
- Reverse a linked list by changing links between nodes – C | C++ | Java
- Linked List insertion in the middle – C | C++ | Java
- Print reverse of a linked list without actually reversing – C |C++ | Java
- Search an element in a linked list – C | C++ | Java
- Insertion in a Sorted Linked List – C | C++ | Java
- Delete alternate nodes of a Linked List – C | C++ | Java
- Find middle of the linked list – C | C++ | Java
- Reverse a linked list in groups of given size – C | C++ | Java
- Find kth node from end of the linked list – C | C++ | Java
- Append the last n nodes of a linked list to the beginning of the list – C | C++ | Java
- Check whether linked list is palindrome or not – C | C++ | Java
- Fold a Linked List – C | C++ | Java
- Insert at a given position – C | C++ | Java
- Delete at a given position – C | C++ | Java
Login/Signup to comment