单向链表

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

#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;
}

原文地址:https://www.cnblogs.com/a-dreaming-dreamer/p/5735802.html