c++链表

(1)结构体定义节点

用结构体存每个链表每个节点存的数据和指向的下一个节点的地址。

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

(2)用结构体定义一个链表,存链表的头指针和长度。

struct List
{
    Node *head;
    int length;
};

(3)新增一个节点(尾插法),节点存的数据是dt

void AddNode(List &list,int dt)
{
    Node *pCurNode=new Node; //开辟一个Node类型数据的空间,将地址返回给pCurNode 
    pCurNode->data=dt;
    pCurNode->next=NULL;
    if(list.head==NULL)        //如果当前插入的是链表第一个节点
    {
        list.head=pCurNode;
        list.length=1;
    }else                              //尾插法
    {
        Node *pt=list.head;
        while(pt->next!=NULL)pt=pt->next; 
        pt->next=pCurNode;
        list.length++;
    }
}

(4)删除存的数据是num的节点

void DeleteNode(List &list,int num)           
{
    Node *pCurNode=list.head;
    Node *preNode=NULL;
    while(pCurNode!=NULL&&pCurNode->data!=num)
    {
        preNode=pCurNode;
        pCurNode=pCurNode->next;
    }
    if(pCurNode==NULL)
    {
        cout<<"Can't find"<<num<<"in the list"<<endl;
        return;
    }
    if(pCurNode==list.head) list.head=list.head->next;//如果删除的节点是第一个节点,改变链表头指针
    else preNode->next=pCurNode->next;
    list.length--;
    delete pCurNode;
}

(5)找到存的数据是num的节点

Node *FindNode(const List &list,int num)
{
    Node *pCurNode=list.head;
    while(pCurNode)
    {
        if(pCurNode->data==num)
        {
            cout<<"找到了"<<num<<".
";
            return pCurNode;
        }
        pCurNode=pCurNode->next;
    }
    cout<<"无法找到"<<num<<endl;
    return NULL;
}

(6)输出这个链表

void Output(const List &list)
{
    cout<<"链表:";
    Node *pCurNode=list.head;
    while(pCurNode!=NULL)
    {
        cout<<pCurNode->data;
        if(pCurNode->next) cout<<"->";
        pCurNode=pCurNode->next;
    }
    cout<<endl;
}

(7)完整代码

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

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

struct List
{
    Node *head;
    int length;
};

void AddNode(List &list,int dt)
{
    Node *pCurNode=new Node; //开辟一个Node类型数据的空间,将地址返回给pCurNode 
    pCurNode->data=dt;
    pCurNode->next=NULL;
    if(list.head==NULL)        //如果当前插入的是链表第一个节点
    {
        list.head=pCurNode;
        list.length=1;
    }else                              //尾插法
    {
        Node *pt=list.head;
        while(pt->next!=NULL)pt=pt->next; 
        pt->next=pCurNode;
        list.length++;
    }
}

void DeleteNode(List &list,int num)           
{
    Node *pCurNode=list.head;
    Node *preNode=NULL;
    while(pCurNode!=NULL&&pCurNode->data!=num)
    {
        preNode=pCurNode;
        pCurNode=pCurNode->next;
    }
    if(pCurNode==NULL)
    {
        cout<<"Can't find"<<num<<"in the list"<<endl;
        return;
    }
    if(pCurNode==list.head) list.head=list.head->next;//如果删除的节点是第一个节点,改变链表头指针
    else preNode->next=pCurNode->next;
    list.length--;
    delete pCurNode;
}

Node *FindNode(const List &list,int num)
{
    Node *pCurNode=list.head;
    while(pCurNode)
    {
        if(pCurNode->data==num)
        {
            cout<<"找到了"<<num<<".
";
            return pCurNode;
        }
        pCurNode=pCurNode->next;
    }
    cout<<"无法找到"<<num<<endl;
    return NULL;
}

void Output(const List &list)
{
    cout<<"链表:";
    Node *pCurNode=list.head;
    while(pCurNode!=NULL)
    {
        cout<<pCurNode->data;
        if(pCurNode->next) cout<<"->";
        pCurNode=pCurNode->next;
    }
    cout<<endl;
}

int main()
{
    List lst;
    lst.head=NULL;lst.length=0;
    int x=3;
    for(int i=1;i<=5;i++)
    {
        int a;
        cin>>a;
        AddNode(lst,a);
    }
    Node *c=FindNode(lst,2);
    cout<<c->data<<endl;
    Output(lst);
    DeleteNode(lst,3);
     Output(lst);
    return 0;
}
原文地址:https://www.cnblogs.com/zzyh/p/11908079.html