C++入门单链表创建、输出、增删改查
作者:野牛程序员:2023-11-26 11:47:52 C++阅读 2668
单链表是一种常见的数据结构,以下是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++单链表从文件里提取数据