ADVERTISEMENT
ADVERTISEMENT

C program to print the Nth node from the last of a singly linked list

Here, we are going to learn how to print the Nth node from the last of a singly linked list using C program?
Submitted by Nidhi, on August 24, 2021

Problem Solution:

Given a single linked list, we have to print the Nth node from the last.

Program:

The source code to print the Nth node from the last of a singly linked list is given below. The given program is compiled and executed using GCC compile on UBUNTU 18.04 OS successfully.

// C program to print the Nth node from the last
// of a singly linked list

#include <stdio.h>
#include <stdlib.h>

//Self-referential structure to create the node.
typedef struct tmp {
    int item;
    struct tmp* next;
} Node;

//structure for creating the linked list.
typedef struct
    {
    Node* head;
    Node* tail;

} List;

//Initialize List
void initList(List* lp)
{
    lp->head = NULL;
    lp->tail = NULL;
}

//Create node and return the reference of it.
Node* createNode(int item)
{
    Node* nNode;

    nNode = (Node*)malloc(sizeof(Node));

    nNode->item = item;
    nNode->next = NULL;

    return nNode;
}

//Add a new item at the end of the list.
void addAtTail(List* lp, int item)
{
    Node* node;
    node = createNode(item);

    //if list is empty.
    if (lp->head == NULL) {
        lp->head = node;
        lp->tail = node;
    }
    else {
        lp->tail->next = node;
        lp->tail = lp->tail->next;
    }
}

//Add a new item at the beginning of the list.
void addAtHead(List* lp, int item)
{
    Node* node;
    node = createNode(item);

    //if list is empty.
    if (lp->head == NULL) {
        lp->head = node;
        lp->tail = node;
    }
    else {
        node->next = lp->head;
        lp->head = node;
    }
}

//To print the list from start to end of the list.
void printList(List* lp)
{
    Node* node;

    if (lp->head == NULL) {
        printf("\nEmpty List");
        return;
    }

    node = lp->head;

    while (node != NULL) {
        printf("| %05d |", node->item);
        node = node->next;

        if (node != NULL)
            printf("--->");
    }
    printf("\n\n");
}

void printNthNode(List* lp, int n)
{
    Node* temp;
    int count = 0;
    int nodeNum = 0;
    int i = 0;

    temp = lp->head;
    while (temp != NULL) {
        count++;
        temp = temp->next;
    }

    if (n > count) {
        printf("You have entered wrong value of N\n");
        return;
    }

    nodeNum = count - n + 1;

    count = 0;
    temp = lp->head;
    while (temp != NULL) {
        count++;
        if (count == nodeNum)
            printf("Nth node is: %d\n", temp->item);
        temp = temp->next;
    }
}

//Main function to execute program.
int main()
{
    List* lp;

    lp = (List*)malloc(sizeof(List));

    initList(lp);

    addAtTail(lp, 101);
    addAtTail(lp, 102);
    addAtTail(lp, 103);
    addAtTail(lp, 104);
    addAtTail(lp, 105);

    printf("List:\n");
    printList(lp);

    printNthNode(lp, 4);

    return 0;
}

Output:

List:
| 00101 |--->| 00102 |--->| 00103 |--->| 00104 |--->| 00105 |

Nth node is: 102

Explanation:

Here, we created a self-referential structure to implement a linked list, a function to add a node at the start and end of the list, and a function printNthNode() to find the Nth node from the last of the linked list.

In the main() function, we created a singly linked list, and called the function printNthNode() to find and print the Nth node.

ADVERTISEMENT
ADVERTISEMENT


Comments and Discussions!



ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT

Languages: » C » C++ » C++ STL » Java » Data Structure » C#.Net » Android » Kotlin » SQL
Web Technologies: » PHP » Python » JavaScript » CSS » Ajax » Node.js » Web programming/HTML
Solved programs: » C » C++ » DS » Java » C#
Aptitude que. & ans.: » C » C++ » Java » DBMS
Interview que. & ans.: » C » Embedded C » Java » SEO » HR
CS Subjects: » CS Basics » O.S. » Networks » DBMS » Embedded Systems » Cloud Computing
» Machine learning » CS Organizations » Linux » DOS
More: » Articles » Puzzles » News/Updates

© https://www.includehelp.com some rights reserved.