当前位置:首页 C++ > 正文

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击