C++中单链表操作



在C++中,单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。以下是在C++中实现单链表操作的一些基本步骤:

  1. 定义节点结构

首先,我们需要定义一个节点结构来表示单链表中的每个节点。节点结构通常包含一个数据元素和一个指向下一个节点的指针。以下是一个简单的节点结构示例:

struct Node {  
    int data; // 数据元素  
    Node* next; // 指向下一个节点的指针  
};
  1. 创建链表

要创建一个单链表,我们需要创建一个头节点,并将后续节点添加到链表中。以下是一个创建链表的示例:

void createList(Node*& head, int n) {  
    head = nullptr; // 初始化头节点为null  
    Node* prev = nullptr;  
    for (int i = 0; i < n; i++) {  
        int data;  
        cin >> data; // 读入数据元素  
        Node* newNode = new Node{ data, nullptr }; // 创建新节点  
        if (prev == nullptr) {  
            head = newNode; // 如果链表为空,将新节点设置为头节点  
        } else {  
            prev->next = newNode; // 将新节点添加到上一个节点的后面  
        }  
        prev = newNode; // 更新prev指针为当前节点  
    }  
}
  1. 插入节点

要向链表中插入一个节点,我们需要遍历链表以找到要插入的位置,并更新相应节点的指针。以下是一个插入节点的示例:

void insertNode(Node*& head, int data, int position) {  
    Node* newNode = new Node{ data, nullptr }; // 创建新节点  
    if (position == 0) { // 插入到头部  
        newNode->next = head;  
        head = newNode;  
    } else {  
        Node* curr = head;  
        for (int i = 0; i < position - 1; i++) { // 找到要插入的位置的前一个节点  
            curr = curr->next;  
        }  
        newNode->next = curr->next; // 将新节点插入到当前节点的后面  
        curr->next = newNode;  
    }  
}
  1. 删除节点

要从链表中删除一个节点,我们需要遍历链表以找到要删除的节点,并更新相应节点的指针。以下是一个删除节点的示例:

void deleteNode(Node*& head, int position) {  
    if (position == 0) { // 删除头节点  
        Node* temp = head;  
        head = head->next;  
        delete temp;  
    } else {  
        Node* curr = head;  
        for (int i = 0; i < position - 1; i++) { // 找到要删除的节点的前一个节点  
            curr = curr->next;  
        }  
        Node* temp = curr->next; // 保存要删除的节点的指针  
        curr->next = temp->next; // 将当前节点的下一个指针指向要删除节点的下一个节点  
        delete temp; // 删除节点  
    }  
}
  1. 遍历链表并打印元素值要遍历链表并打印元素值,我们可以从头节点开始遍历链表,并输出每个节点的数据元素。以下是一个遍历链表并打印元素值的示例:
void printList(Node* head) {   
    while (head != nullptr) {   
        cout << head->data << " "; // 输出当前节点的数据元素值   
        head = head->next; // 移动到下一个节点   
    }   
    cout << endl; // 输出换行符   
}