Skip to main content

Find second last element in linked list in c

C program for Find second last element in linked list. Here problem description and other solutions.

// Include header file
#include <stdio.h>
#include <stdlib.h>

// C program for
// Find the second last node of a linked list

// Node of Linked List
typedef struct LinkNode
{
	// Define useful field of LinkNode
	int data;
	struct LinkNode * next;
}LinkNode;

LinkNode * getLinkNode(int data)
{
	// Create dynamic memory of LinkNode
	LinkNode * me = (LinkNode * ) malloc(sizeof(LinkNode));
	if (me == NULL)
	{
		// Failed to create memory 
		return NULL;
	}
	// Set node value
	me->data = data;
	me->next = NULL;
	return me;
}
typedef struct SingleLL
{
	// Define useful field of SingleLL
	struct LinkNode * head;
	struct LinkNode * tail;
}SingleLL;

SingleLL * getSingleLL()
{
	// Create dynamic memory of SingleLL
	SingleLL * me = (SingleLL * ) malloc(sizeof(SingleLL));
	if (me == NULL)
	{
		// Failed to create memory 
		return NULL;
	}
	// Set head and tail 
	me->head = NULL;
	me->tail = NULL;
	return me;
}
// Add new node at the end of linked list
void insert(SingleLL * me, int value)
{
	// Create a new node
	LinkNode * node = getLinkNode(value);
	if ((me->head == NULL))
	{
		me->head = node;
	}
	else
	{
		me->tail->next = node;
	}
	me->tail = node;
}
// Display linked list element
void display(SingleLL * me)
{
	if ((me->head == NULL))
	{
		return;
	}
	LinkNode * temp = me->head;
	// iterating linked list elements
	while (temp != NULL)
	{
		printf("%d → ",temp->data);
		// Visit to next node
		temp = temp->next;
	}
	printf("null\n");
}
//Find the second last node of a linked list
void secondLast(SingleLL * me)
{
	LinkNode * node = me->head;
	if ((node == NULL))
	{
		printf("Empty linked list");
	}
	else if ((node->next == NULL))
	{
		printf("Only one node in this linked list");
	}
	else
	{
		// Find second last node
		while (node->next != NULL && 
               node->next->next != NULL)
		{
			// Visit to second next node
			node = node->next->next;
		}
		printf("Second last element is : %d", node->data);
	}
}
int main()
{
	SingleLL * sll = getSingleLL();
	// Add linked list node
	insert(sll, 6);
	insert(sll, 3);
	insert(sll, 2);
	insert(sll, 7);
	insert(sll, 1);
	insert(sll, 9);
	printf("Linked List");
	// 6 → 3 → 2 → 7 → 1 → 9 → null
	display(sll);
	secondLast(sll);
}

Output

Linked List6 → 3 → 2 → 7 → 1 → 9 → null
Second last element is : 1




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment