C++入门单链表创建、输出、增删改查
作者:野牛程序员:2023-11-26 11:47:52 C++阅读 2725
单链表是一种常见的数据结构,以下是C++中单链表的基本操作示例:
创建单链表:
#include <iostream>
struct Node {
int data;
Node* next;
};
Node* createNode(int value) {
Node* newNode = new Node;
newNode->data = value;
newNode->next = nullptr;
return newNode;
}
Node* createLinkedList(int values[], int n) {
if (n == 0) {
return nullptr;
}
Node* head = createNode(values[0]);
Node* current = head;
for (int i = 1; i < n; ++i) {
current->next = createNode(values[i]);
current = current->next;
}
return head;
}输出单链表:
void printLinkedList(Node* head) {
Node* current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}插入节点:
void insertNode(Node*& head, int value, int position) {
Node* newNode = createNode(value);
if (position == 0) {
newNode->next = head;
head = newNode;
return;
}
Node* current = head;
for (int i = 0; i < position - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current == nullptr) {
std::cout << "Invalid position. Node not inserted." << std::endl;
delete newNode;
return;
}
newNode->next = current->next;
current->next = newNode;
}删除节点:
void deleteNode(Node*& head, int position) {
if (head == nullptr) {
std::cout << "List is empty. Node not deleted." << std::endl;
return;
}
if (position == 0) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* current = head;
for (int i = 0; i < position - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current == nullptr || current->next == nullptr) {
std::cout << "Invalid position. Node not deleted." << std::endl;
return;
}
Node* temp = current->next;
current->next = current->next->next;
delete temp;
}查找节点:
Node* searchNode(Node* head, int value) {
Node* current = head;
while (current != nullptr) {
if (current->data == value) {
return current;
}
current = current->next;
}
return nullptr;
}这些函数可以用于创建、输出、插入、删除和查找单链表中的节点。请注意,这里的链表索引从0开始。
下面是完整的代码:
#include <iostream>
struct Node {
int data;
Node* next;
};
Node* createNode(int value) {
Node* newNode = new Node;
newNode->data = value;
newNode->next = nullptr;
return newNode;
}
Node* createLinkedList(int values[], int n) {
if (n == 0) {
return nullptr;
}
Node* head = createNode(values[0]);
Node* current = head;
for (int i = 1; i < n; ++i) {
current->next = createNode(values[i]);
current = current->next;
}
return head;
}
void printLinkedList(Node* head) {
Node* current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}
void insertNode(Node*& head, int value, int position) {
Node* newNode = createNode(value);
if (position == 0) {
newNode->next = head;
head = newNode;
return;
}
Node* current = head;
for (int i = 0; i < position - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current == nullptr) {
std::cout << "Invalid position. Node not inserted." << std::endl;
delete newNode;
return;
}
newNode->next = current->next;
current->next = newNode;
}
void deleteNode(Node*& head, int position) {
if (head == nullptr) {
std::cout << "List is empty. Node not deleted." << std::endl;
return;
}
if (position == 0) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* current = head;
for (int i = 0; i < position - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current == nullptr || current->next == nullptr) {
std::cout << "Invalid position. Node not deleted." << std::endl;
return;
}
Node* temp = current->next;
current->next = current->next->next;
delete temp;
}
Node* searchNode(Node* head, int value) {
Node* current = head;
while (current != nullptr) {
if (current->data == value) {
return current;
}
current = current->next;
}
return nullptr;
}
int main() {
int values[] = {1, 2, 3, 4, 5};
int n = sizeof(values) / sizeof(values[0]);
Node* head = createLinkedList(values, n);
std::cout << "Original Linked List: ";
printLinkedList(head);
insertNode(head, 6, 2);
std::cout << "Linked List after insertion: ";
printLinkedList(head);
deleteNode(head, 3);
std::cout << "Linked List after deletion: ";
printLinkedList(head);
int searchValue = 4;
Node* result = searchNode(head, searchValue);
if (result != nullptr) {
std::cout << "Node with value " << searchValue << " found." << std::endl;
} else {
std::cout << "Node with value " << searchValue << " not found." << std::endl;
}
return 0;
}野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:c++输出数组最大值和下标
- 下一篇:c++单链表从文件里提取数据
