Append Last K Nodes of a Linked List in c++

 

Append Last K Nodes of a Linked List in c++

Appending the last K nodes of a linked list in C++ is a common operation that can be accomplished using a few basic steps. The key to this operation is understanding how linked lists work and how to traverse them in a specific order.

A linked list is a data structure that consists of a series of nodes, each of which contains a value and a reference to the next node in the list. In order to append the last K nodes of a linked list, we first need to determine the length of the list and then traverse it in reverse order until we reach the Kth node from the end.

The first step in appending the last K nodes of a linked list is to determine the length of the list. This can be done by initializing a variable to zero and then incrementing it for each node in the list as we traverse it. Once we have the length of the list, we can use this value to calculate the Kth node from the end.

The next step is to traverse the linked list in reverse order, starting from the last node and moving towards the first. This can be done using a while loop, with the condition being that the current node is not equal to NULL. As we traverse the list, we can check if the current node is the Kth node from the end and, if so, append it to a new list.

Once we have the Kth node from the end, we can continue traversing the linked list in reverse order, adding each node to the new list as we go. Finally, we can return the new list, which will contain the last K nodes of the original list.

Here is an example of a C++ program that demonstrates how to append the last K nodes of a linked list:

#include <iostream> using namespace std;
 // Define a node struct
  struct Node { int data; Node* next; };
 // Function to append last K nodes of a linked list 
 Node* appendLastKNodes(Node* head, int k) {
 // Determine the length of the list 
 int length = 0; Node* current = head;
 while (current != NULL) { 
 length++; current = current->next;
 }  
// Calculate the Kth node from the end 
 int kthNode = length - k;
 // Traverse the list in reverse order current = head;
 while (current != NULL) { if (kthNode == 0) {
 // Append node to new list 
 Node* newNode = new Node; newNode->data = current->data;
 newNode->next = NULL; head = newNode;
 }
 else { kthNode--; } current = current->next;
 } // Return the new list return head; 
} // Function to print the linked list 
void printList(Node* head) { Node* current = head;
 while (current != NULL
 cout << current->data << " ";
 current = current->next;
 } 
cout << endl; 
 int main() 
 {
 // Create a linked list 
 Node* head = new Node; head->data = 1;
 head->next = new Node; head->next->data = 2;
 head->next->next = new Node;
 head->next->next->data = 3