singly linked list (tsz. singly linked lists)
Egy egyszeresen láncolt lista (singly linked list) egy dinamikusan allokált adatszerkezet, amely csomópontokból (node-okból) áll. Minden csomópont egy adatmezőt és egy mutatót a következő elemre tartalmaz. Az első csomópontot fejnek (head) nevezzük, az utolsót pedig faroknak (tail), amelynek a következőre mutató értéke nullptr
.
#include <iostream>
// Csomópont struktúra
struct Node {
int data;
Node* next;
Node(int d) : data(d), next(nullptr) {} // Konstruktor
};
// Láncolt lista osztály
class SinglyLinkedList {
private:
Node* head; // Fej csomópont
public:
SinglyLinkedList() : head(nullptr) {} // Konstruktor
// Új elem beszúrása a lista elejére
void insertAtBeginning(int value) {
Node* newNode = new Node(value);
newNode->next = head;
head = newNode;
}
// Új elem beszúrása a lista végére
void insertAtEnd(int value) {
Node* newNode = new Node(value);
if (!head) { // Ha üres a lista
head = newNode;
return;
}
Node* temp = head;
while (temp->next) { // Utolsó elem megkeresése
temp = temp->next;
}
temp->next = newNode;
}
// Adott érték törlése a listából
void deleteValue(int value) {
if (!head) return; // Ha üres a lista
if (head->data == value) { // Ha az első elem a törlendő
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* temp = head;
while (temp->next && temp->next->data != value) {
temp = temp->next;
}
if (temp->next) { // Ha megtaláltuk az elemet
Node* toDelete = temp->next;
temp->next = temp->next->next;
delete toDelete;
}
}
// Lista kiírása
void printList() {
Node* temp = head;
while (temp) {
std::cout << temp->data << " -> ";
temp = temp->next;
}
std::cout << "nullptr" << std::endl;
}
// Destruktor (memóriaszivárgás elkerülése)
~SinglyLinkedList() {
Node* temp;
while (head) {
temp = head;
head = head->next;
delete temp;
}
}
};
// Főprogram
int main() {
SinglyLinkedList list;
list.insertAtBeginning(3);
list.insertAtBeginning(2);
list.insertAtBeginning(1);
list.insertAtEnd(4);
list.insertAtEnd(5);
std::cout << "Lista elemei: ";
list.printList();
list.deleteValue(3);
std::cout << "3-as törlése után: ";
list.printList();
return 0;
}
insertAtBeginning
): Új csomópontot hoz létre, és a meglévő head
mutatót átállítja az új elemre.insertAtEnd
): Végigiterál a listán, és az utolsó elem next
mutatóját beállítja az új csomópontra.deleteValue
): Megkeresi az adott értéket és eltávolítja a listából.printList
): Végigmegy a listán, és kiírja az elemeket.~SinglyLinkedList
): Törli az összes csomópontot, hogy elkerülje a memóriaszivárgást.