C++单链表操作:查询、插入、删除

本文提供C++代码实现单链表的基本操作,包括查询指定元素、在指定位置插入元素和删除指定位置的元素。

代码实现

#include <iostream>
using namespace std;

// 定义链表节点结构体
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 定义链表类型
typedef struct {
    Node* head;
    int length;
} LinkList;

// 初始化链表
void InitList(LinkList& H) {
    H.head = nullptr;
    H.length = 0;
}

// 查询链表中是否存在指定元素
int Get_LinkList(LinkList H, int key) {
    Node* p = H.head;
    int index = 1;
    while (p != nullptr) {
        if (p->data == key) {
            return index;
        }
        p = p->next;
        index++;
    }
    return -1;
}

// 在链表的指定位置插入元素
bool ListInsert(LinkList& H, int i, int e) {
    if (i < 1 || i > H.length + 1) {
        return false;
    }
    Node* newNode = new Node;
    newNode->data = e;
    newNode->next = nullptr;
    if (i == 1) {
        newNode->next = H.head;
        H.head = newNode;
    } else {
        Node* p = H.head;
        for (int j = 1; j < i - 1; j++) {
            p = p->next;
        }
        newNode->next = p->next;
        p->next = newNode;
    }
    H.length++;
    return true;
}

// 删除链表中指定位置的元素
bool ListDelete(LinkList& H, int i) {
    if (i < 1 || i > H.length) {
        return false;
    }
    Node* p = H.head;
    if (i == 1) {
        H.head = p->next;
    } else {
        Node* q;
        for (int j = 1; j < i - 1; j++) {
            p = p->next;
        }
        q = p->next;
        p->next = q->next;
        delete q;
    }
    H.length--;
    return true;
}

// 打印链表
void PrintList(LinkList H) {
    Node* p = H.head;
    while (p != nullptr) {
        cout << p->data << ' ';
        p = p->next;
    }
    cout << endl;
}

int main() {
    LinkList H;
    InitList(H);

    // 插入元素
    ListInsert(H, 1, 10);
    ListInsert(H, 2, 20);
    ListInsert(H, 3, 30);

    // 打印链表
    PrintList(H);

    // 查询元素
    int index = Get_LinkList(H, 20);
    if (index != -1) {
        cout << "元素20在链表中的位置为:" << index << endl;
    } else {
        cout << "链表中不存在元素20" << endl;
    }

    // 删除元素
    ListDelete(H, 2);

    // 打印链表
    PrintList(H);

    return 0;
}

在上述代码中,ElemType被替换为int类型,可以根据实际需求进行更改。

代码说明

  1. 链表节点结构体Node: 包含数据域data和指向下一个节点的指针next
  2. 链表类型LinkList: 包含头指针head和链表长度length
  3. 初始化链表InitList: 将头指针设为nullptr,链表长度设为0
  4. 查询指定元素Get_LinkList: 从头指针开始遍历链表,如果找到指定元素,返回其在链表中的位置,否则返回-1
  5. 在指定位置插入元素ListInsert: 如果插入位置无效,返回false;否则,创建一个新的节点,将数据存入节点,并将节点插入到指定位置。
  6. 删除指定位置的元素ListDelete: 如果删除位置无效,返回false;否则,删除指定位置的节点。
  7. 打印链表PrintList: 从头指针开始遍历链表,依次输出每个节点的数据。

总结

本文提供了一个C++实现单链表基本操作的示例代码,并对代码进行了详细说明。希望这能帮助读者更好地理解和学习单链表的基本操作。

C++单链表操作:查询、插入、删除

原文地址: http://www.cveoy.top/t/topic/pb1Q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录