0% found this document useful (0 votes)
4 views

Linked List Sample Program

The document contains two sample programs demonstrating linked list implementations in C++. The first program defines a basic linked list class with methods for appending, traversing, inserting, deleting nodes, and destroying the list. The second program showcases a template-based linked list that can handle different data types, including integers and strings.

Uploaded by

Monette Loy-a
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Linked List Sample Program

The document contains two sample programs demonstrating linked list implementations in C++. The first program defines a basic linked list class with methods for appending, traversing, inserting, deleting nodes, and destroying the list. The second program showcases a template-based linked list that can handle different data types, including integers and strings.

Uploaded by

Monette Loy-a
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Linked List Sample Program

Sample Program 1

#include <iostream>
struct Node {
int data;
Node* next;

Node(int val) : data(val), next(nullptr) {}


};

class LinkedList {
private:
Node* head;

public:
LinkedList() : head(nullptr) {}

// 1. Append a node to the end of the list


void append(int value) {
Node* newNode = new Node(value);
if (!head) {
head = newNode;
}
else {
Node* temp = head;
while (temp->next) {
temp = temp->next;
}
temp->next = newNode;
}
std::cout << "Appended: " << value << std::endl;
}

// 2. Traverse the list and print all elements


void traverse() {
if (!head) {
std::cout << "List is empty!" << std::endl;
return;
}
Node* temp = head;
std::cout << "List contents: ";
while (temp) {
std::cout << temp->data << " ";
temp = temp->next;
}
std::cout << std::endl;
}

// 3. Insert a node at a specific position


void insert(int value, int position) {
Node* newNode = new Node(value);
if (position == 0) { // Insert at the head
newNode->next = head;
head = newNode;
}
else {
Node* temp = head;
for (int i = 0; temp && i < position - 1; ++i) {
temp = temp->next;
}
if (!temp) {
std::cout << "Position out of bounds. Insert failed." << std::endl;
delete newNode;
return;
}
newNode->next = temp->next;
temp->next = newNode;
}
std::cout << "Inserted: " << value << " at position: " << position << std::endl;
}

// 4. Delete a node with a specific value


void remove(int value) {
if (!head) {
std::cout << "List is empty. Nothing to delete." << std::endl;
return;
}
if (head->data == value) { // Remove head node
Node* temp = head;
head = head->next;
delete temp;
std::cout << "Deleted: " << value << std::endl;
return;
}
Node* temp = head;
while (temp->next && temp->next->data != value) {
temp = temp->next;
}
if (temp->next) {
Node* toDelete = temp->next;
temp->next = toDelete->next;
delete toDelete;
std::cout << "Deleted: " << value << std::endl;
}
else {
std::cout << "Value " << value << " not found in the list." << std::endl;
}
}

// 5. Destroy the entire list


void destroy() {
while (head) {
Node* temp = head;
head = head->next;
delete temp;
}
std::cout << "List destroyed!" << std::endl;
}

// Destructor
~LinkedList() {
destroy();
}
};

int main() {
LinkedList list;

// 1. Appending nodes
list.append(10);
list.append(20);
list.append(30);

// 2. Traversing the list


list.traverse();

// 3. Inserting nodes
list.insert(15, 1); // Insert 15 at position 1
list.insert(5, 0); // Insert 5 at position 0 (head)
list.traverse();
// 4. Deleting nodes
list.remove(20); // Delete node with value 20
list.traverse();
list.remove(100); // Try to delete a non-existent value

// 5. Destroy the list


list.destroy();
list.traverse();

return 0;
}

Sample Program 2

Linked List with template


//save this file as LinkedList.h
#ifndef LINKEDLIST_H
#define LINKEDLIST_H

#include <iostream>
using namespace std;

// Template for the LinkedList


template <class T>
class LinkedList {
private:
// Node structure for the list
struct ListNode {
T value; // Value of the node
ListNode* next; // Pointer to the next node
};
ListNode* head; // Pointer to the first node in the list

public:
// Constructor
LinkedList() : head(nullptr) {}

// Destructor
~LinkedList() {
// Free all nodes
ListNode* current = head;
while (current != nullptr) {
ListNode* temp = current;
current = current->next;
delete temp;
}
}

// Add a new node to the end of the list


void append(T value) {
ListNode* newNode = new ListNode{ value, nullptr };

if (!head) { // If the list is empty


head = newNode;
}
else {
ListNode* current = head;
while (current->next) {
current = current->next;
}
current->next = newNode;
}
}

// Display the list's contents


void display() const {
ListNode* current = head;
while (current) {
cout << current->value << " -> ";
current = current->next;
}
cout << "nullptr" << endl;
}
};
#endif
//save this file as. sample.cpp
#include <iostream>
#include "LinkedList.h" // Include the LinkedList header

int main() {
// Create a LinkedList for integers
LinkedList<int> intList;

// Add elements to the list


intList.append(10);
intList.append(20);
intList.append(30);

// Display the list


cout << "Integer List: ";
intList.display();

// Create a LinkedList for strings


LinkedList<string> stringList;

// Add elements to the list


stringList.append("Hello");
stringList.append("World");

// Display the list


cout << "String List: ";
stringList.display();

return 0;
}

You might also like