• 单向链表


    刷了两道题目就刷不动了,编程和理解能力太差了,还是先拿起我数据结构的书慢慢啃,这次借鉴别人的程序,写了个链表,先贴出来,后面会写出自己的链表代码。好像内存没有释放掉。。。。

    #include <iostream>

    using namespace std;


    class slistNode
    {
    public:
    slistNode():next(NULL),data(0){}
    int data;
    slistNode* next;
    };

    class mylist
    {
    public:
    mylist();
    ~mylist();
    void add(int x);//表尾添加元素
    bool isEmpty();
    void traversal();//遍历整个列表并打印
    slistNode* find(int y);
    void Delete(int z);
    private:
    unsigned int listlength;
    slistNode* node;//临时节点
    slistNode* lastnode;//头节点
    slistNode* headnode;//尾节点
    };
    void mylist::Delete(int z)
    {
    slistNode* temp = headnode;
    if (temp==NULL)
    {
    return;
    }
    if (temp->data==z)//如果是头节点
    {
    headnode = temp->next;
    if (temp->next==NULL)
    {
    lastnode = NULL;
    }
    delete(temp);
    }
    while (temp->next!=NULL&&temp->next->data!=z)
    {
    temp = temp->next;
    }
    if (temp->next == NULL)
    {
    return;
    }
    if (temp->next==lastnode)
    {
    lastnode = temp;
    delete(temp->next);
    temp->next = NULL;
    }
    else
    {
    node = temp->next;
    temp->next = node->next;
    delete(node);
    node = NULL;
    }


    }
    slistNode* mylist::find(int y)
    {
    node = headnode;
    while (node!=NULL&&node->data!=y)
    {
    node = node->next;
    }
    return node;
    }
    void mylist::traversal()
    {
    node = headnode;
    while (node!=NULL)
    {
    cout << node->data<<" ";
    node = node->next;
    }
    cout << endl;

    }
    bool mylist::isEmpty()
    {
    return (lastnode == NULL);
    }
    void mylist::add(int x)
    {
    node = new slistNode();//申请一个新的节点
    node->data = x;
    if (lastnode==NULL)//如果没有尾节点,那么node既是头节点,又是尾节点
    {
    headnode = node;
    lastnode = node;
    }
    else//链表非空
    {
    lastnode->next = node;//node既为尾节点的下一个节点
    lastnode = node;//这个还是必不可少的,node变成了尾节点,把尾节点赋值为node
    }
    listlength++;
    }
    mylist::mylist() :listlength(0), node(NULL), lastnode(NULL), headnode(NULL){}

    mylist::~mylist()
    {
    }

    int main()
    {
    mylist a;
    a.add(1);
    a.add(3);
    a.add(5);
    a.add(7);
    //cout<<a.isEmpty()<<endl;
    //int b;
    //a.traversal();
    /*out<<a.find(5)->data<<endl;*/

    a.Delete(3);
    a.traversal();
    return 0;
    }

  • 相关阅读:
    拦截器接口(IActionFilter,IExceptionFilter,IResultFilter,IAuthorizationFilter)
    Linq学习
    keycode值大全
    C#使用Cookie方法
    领域驱动设计学习
    mvc3 razor语法学习
    O/R Mapping 阻抗失衡
    文档格式批量转换(doc,txt,pdf等)
    统计sql语句
    如何确定文件编码格式的方法??
  • 原文地址:https://www.cnblogs.com/a-dreaming-dreamer/p/5735802.html
Copyright © 2020-2023  润新知