【數據結構-鏈表】鏈表的c++實現


本文包含了鏈表的常用操作,包括創建鏈表、插入節點、刪除節點、遍歷鏈表、求鏈表長度和刪除鏈表,使用c++實現。

#include <iostream>
#include <cstdio>
using namespace std;

struct Node
{
    int data;
    Node* next;
};

//在鏈表中插入值為data的節點
void insert(Node* head, int data)
{
    Node* node = new Node();
    node->data = data;
    node->next = head->next;
    head->next = node;
}

//在值為elem的節點后插入值為data的結點
void insertAfter(Node* head, int elem, int data)
{
    Node* node = head->next;
    while(node!=nullptr && node->data!=elem)
        node = node->next;
    if(node==nullptr)
    {
        cout<<"找不到值為"<<elem<<"的結點"<<endl;
        return;
    }

    Node* newNode = new Node();
    newNode->data = data;
    newNode->next = node->next;
    node->next = newNode;
}

//在鏈表最后添加一個值為data的節點
void append(Node* head, int data)
{
    Node* node = head;
    while(node->next!=nullptr)
        node = node->next;

    Node* newNode = new Node();
    newNode->data = data;
    newNode->next = node->next;
    node->next = newNode;
}

//刪除值為data的節點
void deleteNode(Node* head, int data)
{
    Node* node = head;
    while(node->next!=nullptr && node->next->data!=data)
        node = node->next;
    if(node->next==nullptr)
    {
        cout<<"找不到值為"<<data<<"的結點"<<endl;
        return;
    }

    Node* temp = node->next;
    node->next = node->next->next;
    delete temp;
}

//鏈表長度
int length(Node* head)
{
    int len = 0;
    Node* node = head->next;
    while(node!=nullptr)
    {
        len++;
        node = node->next;
    }
    return len;
}

//遞歸刪除鏈表
void deleteLinkList(Node* head)
{
    if(head->next!=nullptr)
        deleteLinkList(head->next);
    delete(head);
}

//打印鏈表
void print(Node* head)
{
    Node* node = head->next;
    while(node!=nullptr)
    {
        cout<<node->data<<" ";
        node = node->next;
    }
    cout<<endl;
}


int main()
{
    Node* head = new Node(); //頭結點
    int n; //鏈表中的元素個數
    cin>>n;
    for(int i=0; i<n; i++)
    {
        int t;
        cin>>t;
        insert(head, t);
    }
    print(head);
    cout<<length(head)<<endl;

    insertAfter(head, 2, 4);
    print(head);
    cout<<length(head)<<endl;

    append(head, 5);
    print(head);
    cout<<length(head)<<endl;

    deleteNode(head, 5);
    print(head);
    cout<<length(head)<<endl;

    deleteLinkList(head);
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM