Remove every k-th node of the linked list

11 Jun, 2022
Given a singly linked list, Your task is to remove every K-th node of the linked list. Assume that K is always less than or equal to length of Linked List.Examples :  
Input : 1->2->3->4->5->6->7->8  
        k = 3
Output : 1->2->4->5->7->8
As 3 is the k-th node after its deletion list 
would be 1->2->4->5->6->7->8
And now 4 is the starting node then from it, 6 
would be the k-th node. So no other kth node 
could be there.So, final list is:
1->2->4->5->7->8.

Input: 1->2->3->4->5->6  
       k = 1
Output: Empty list 
All nodes need to be deleted
 
The idea is to traverse the list from the beginning and keep track of nodes visited after the last deletion. Whenever count becomes k, delete the current node and reset the count as 0. 
(1) Traverse list and do following
   (a) Count node before deletion.
   (b) If (count == k) that means current 
        node is to be deleted.
      (i)  Delete current node i.e. do

          //  assign address of next node of 
          // current node to the previous node
          // of the current node.
          prev->next = ptr->next i.e.

       (ii) Reset count as 0, i.e., do count = 0.
   (c) Update prev node if count != 0 and if
       count is 0 that means that node is a
       starting point.
   (d) Update ptr and continue until all 
       k-th node gets deleted.
Below is the implementation.  
C++
Java
Python3
C#
Javascript
// C++ program to delete every k-th Node of// a singly linked list.#include<bits/stdc++.h>using namespace std; /* Linked list Node */struct Node{    int data;    struct Node* next;}; // To remove complete list (Needed for// case when k is 1)void freeList(Node *node){    while (node != NULL)    {        Node *next = node->next;        delete (node);        node  = next;    }} // Deletes every k-th node and returns head// of modified list.Node *deleteKthNode(struct Node *head, int k){    // If linked list is empty    if (head == NULL)        return NULL;     if (k == 1)    {       freeList(head);       return NULL;    }     // Initialize ptr and prev before starting    // traversal.    struct Node *ptr = head, *prev = NULL;     // Traverse list and delete every k-th node    int count = 0;    while (ptr != NULL)    {        // increment Node count        count++;         // check if count is equal to k        // if yes, then delete current Node        if (k == count)        {            // put the next of current Node in            // the next of previous Node            delete(prev->next);            prev->next = ptr->next;             // set count = 0 to reach further            // k-th Node            count = 0;        }         // update prev if count is not 0        if (count != 0)            prev = ptr;         ptr = prev->next;    }     return head;} /* Function to print linked list */void displayList(struct Node *head){    struct Node *temp = head;    while (temp != NULL)    {        cout<<temp->data<<" ";        temp = temp->next;    }} // Utility function to create a new node.struct Node *newNode(int x){    Node *temp = new Node;    temp->data = x;    temp->next = NULL;    return temp;} /* Driver program to test count function*/int main(){    /* Start with the empty list */    struct Node* head = newNode(1);    head->next = newNode(2);    head->next->next = newNode(3);    head->next->next->next = newNode(4);    head->next->next->next->next = newNode(5);    head->next->next->next->next->next = newNode(6);    head->next->next->next->next->next->next =                                        newNode(7);    head->next->next->next->next->next->next->next =                                        newNode(8);     int k = 3;    head = deleteKthNode(head, k);     displayList(head);     return 0;}
// Java program to delete every k-th Node// of a singly linked list.class GFG{ /* Linked list Node */static class Node{    int data;    Node next;} // To remove complete list (Needed for// case when k is 1)static Node freeList(Node node){    while (node != null)    {        Node next = node.next;        node = next;    }    return node;} // Deletes every k-th node and// returns head of modified list.static Node deleteKthNode(Node head, int k){    // If linked list is empty    if (head == null)        return null;     if (k == 1)    {        head = freeList(head);        return null;    }     // Initialize ptr and prev before    // starting traversal.    Node ptr = head, prev = null;     // Traverse list and delete    // every k-th node    int count = 0;    while (ptr != null)    {        // increment Node count        count++;         // check if count is equal to k        // if yes, then delete current Node        if (k == count)        {            // put the next of current Node in            // the next of previous Node            prev.next = ptr.next;             // set count = 0 to reach further            // k-th Node            count = 0;        }         // update prev if count is not 0        if (count != 0)            prev = ptr;         ptr = prev.next;    }    return head;} /* Function to print linked list */static void displayList(Node head){    Node temp = head;    while (temp != null)    {        System.out.print(temp.data + " ");        temp = temp.next;    }} // Utility function to create a new node.static Node newNode(int x){    Node temp = new Node();    temp.data = x;    temp.next = null;    return temp;} // Driver Codepublic static void main(String args[]){    /* Start with the empty list */    Node head = newNode(1);    head.next = newNode(2);    head.next.next = newNode(3);    head.next.next.next = newNode(4);    head.next.next.next.next = newNode(5);    head.next.next.next.next.next = newNode(6);    head.next.next.next.next.next.next =                                        newNode(7);    head.next.next.next.next.next.next.next =                                        newNode(8);     int k = 3;    head = deleteKthNode(head, k);     displayList(head);}} // This code is contributed by Arnab Kundu
# Python3 program to delete every k-th Node# of a singly linked list.import math # Linked list Nodeclass Node:    def __init__(self, data):        self.data = data        self.next = None # To remove complete list (Needed for# case when k is 1)def freeList(node):    while (node != None):        next = node.next        node = next    return node # Deletes every k-th node and# returns head of modified list.def deleteKthNode(head, k):         # If linked list is empty    if (head == None):        return None     if (k == 1):        freeList(head)        return None         # Initialize ptr and prev before    # starting traversal.    ptr = head    prev = None     # Traverse list and delete every k-th node    count = 0    while (ptr != None):                 # increment Node count        count = count + 1         # check if count is equal to k        # if yes, then delete current Node        if (k == count):                         # put the next of current Node in            # the next of previous Node            # delete(prev.next)            prev.next = ptr.next             # set count = 0 to reach further            # k-th Node            count = 0                 # update prev if count is not 0        if (count != 0):            prev = ptr         ptr = prev.next         return head # Function to print linked listdef displayList(head):    temp = head    while (temp != None):        print(temp.data, end = ' ')        temp = temp.next     # Utility function to create a new node.def newNode( x):    temp = Node(x)    temp.data = x    temp.next = None    return temp # Driver Codeif __name__=='__main__':         # Start with the empty list    head = newNode(1)    head.next = newNode(2)    head.next.next = newNode(3)    head.next.next.next = newNode(4)    head.next.next.next.next = newNode(5)    head.next.next.next.next.next = newNode(6)    head.next.next.next.next.next.next = newNode(7)    head.next.next.next.next.next.next.next = newNode(8)     k = 3    head = deleteKthNode(head, k)     displayList(head) # This code is contributed by Srathore
// C# program to delete every k-th Node// of a singly linked list.using System;     class GFG{ /* Linked list Node */public class Node{    public int data;    public Node next;} // To remove complete list (Needed for// case when k is 1)static Node freeList(Node node){    while (node != null)    {        Node next = node.next;        node = next;    }    return node;} // Deletes every k-th node and// returns head of modified list.static Node deleteKthNode(Node head, int k){    // If linked list is empty    if (head == null)        return null;     if (k == 1)    {        head = freeList(head);        return null;    }     // Initialize ptr and prev before    // starting traversal.    Node ptr = head, prev = null;     // Traverse list and delete    // every k-th node    int count = 0;    while (ptr != null)    {        // increment Node count        count++;         // check if count is equal to k        // if yes, then delete current Node        if (k == count)        {            // put the next of current Node in            // the next of previous Node            prev.next = ptr.next;             // set count = 0 to reach further            // k-th Node            count = 0;        }         // update prev if count is not 0        if (count != 0)            prev = ptr;         ptr = prev.next;    }    return head;} /* Function to print linked list */static void displayList(Node head){    Node temp = head;    while (temp != null)    {        Console.Write(temp.data + " ");        temp = temp.next;    }} // Utility function to create a new node.static Node newNode(int x){    Node temp = new Node();    temp.data = x;    temp.next = null;    return temp;} // Driver Codepublic static void Main(String []args){    /* Start with the empty list */    Node head = newNode(1);    head.next = newNode(2);    head.next.next = newNode(3);    head.next.next.next = newNode(4);    head.next.next.next.next = newNode(5);    head.next.next.next.next.next = newNode(6);    head.next.next.next.next.next.next = newNode(7);    head.next.next.next.next.next.next.next = newNode(8);     int k = 3;    head = deleteKthNode(head, k);     displayList(head);}} // This code is contributed by PrinciRaj1992
<script> // Javascript program to delete every k-th Node// of a singly linked list./* Linked list Node */class Node {    constructor() {        this.data = 0;        this.next = null;    }}      // To remove complete list (Needed for    // case when k is 1)    function freeList( node) {        while (node != null) {             next = node.next;            node = next;        }        return node;    }     // Deletes every k-th node and    // returns head of modified list.    function deleteKthNode( head , k) {        // If linked list is empty        if (head == null)            return null;         if (k == 1) {            head = freeList(head);            return null;        }         // Initialize ptr and prev before        // starting traversal.        var ptr = head, prev = null;         // Traverse list and delete        // every k-th node        var count = 0;        while (ptr != null) {            // increment Node count            count++;             // check if count is equal to k            // if yes, then delete current Node            if (k == count) {                // put the next of current Node in                // the next of previous Node                prev.next = ptr.next;                 // set count = 0 to reach further                // k-th Node                count = 0;            }             // update prev if count is not 0            if (count != 0)                prev = ptr;             ptr = prev.next;        }        return head;    }     /* Function to print linked list */    function displayList( head) {         temp = head;        while (temp != null) {            document.write(temp.data + " ");            temp = temp.next;        }    }     // Utility function to create a new node.    function newNode(x) {         temp = new Node();        temp.data = x;        temp.next = null;        return temp;    }     // Driver Code             /* Start with the empty list */         head = newNode(1);        head.next = newNode(2);        head.next.next = newNode(3);        head.next.next.next = newNode(4);        head.next.next.next.next = newNode(5);        head.next.next.next.next.next = newNode(6);        head.next.next.next.next.next.next = newNode(7);        head.next.next.next.next.next.next.next = newNode(8);         var k = 3;        head = deleteKthNode(head, k);         displayList(head); // This code contributed by umadevi9616 </script>
Output:  
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
default, selected
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
1 2 4 5 7 8
Time Complexity : O(n) Auxiliary Space : O(1)  
Remove every k-th node of the linked list | GeeksforGeeks - YouTubeGeeksforGeeks529K subscribersRemove every k-th node of the linked list | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 5:53•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=o-_r86WD3Qo" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
andrew1234
sapnasingh4991
princiraj1992
Akanksha_Rai
umadevi9616
Kirti_Mangal
polymatir3j
Amazon
Microsoft
Linked List
Amazon
Microsoft
Linked List
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Stack Data Structure (Introduction and Program)
LinkedList in Java
Introduction to Data Structures
What is Data Structure: Types, Classifications and Applications
Implementing a Linked List in Java using Class
Add two numbers represented by linked lists | Set 1
Detect and Remove Loop in a Linked List
Queue - Linked List Implementation
Function to check if a singly linked list is palindrome
Implement a stack using singly linked list