STL中链表操作和正常的链表操作的比较
先写一个正常的链表操作,还有点小问题,谁看到了给我留言一下,帮我改一下,就是在删除的时候不能删除第一个元素,第二个就是删除的元素不能紧挨着,比如说有一组数据 1 2 3 5 2 25 2 2 2 4,我想删除2,那么就会报错,找了很长时间,真的找不出来了。
#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node*next;
}*NODE;
NODE creatlist()
{
NODE pHead = (NODE)malloc(sizeof(struct node));
if (pHead == NULL)
{
cout << "创建链表失败" << endl;
}
return pHead;
}
NODE insertData(NODE pHead)
{
int data;
NODE p = pHead;
cout << "请输入数据,以0结束:" << endl;
cin >> data;
while (data != 0)
{
NODE cur = (NODE)malloc(sizeof(struct node));
p->data = data;
p->next = cur;
p = cur;
cin >> data;
}
p->data = 0;//多申请了一个cur的空间,我也不知道怎么把这个节点去掉,先
//先暂时将最后的数据置为0
p->next = NULL;
return pHead;
}
void showListData(NODE pHead)
{
NODE p = pHead;
cout << "链表的数据为:";
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void deleteListData(NODE pHead)
{
NODE p = pHead;
NODE qCur,pCur,dCur;
cout << "请输入你想要删除的数据:";
int data;
cin >> data;
/*if (p->data == data)
{
dCur = p;
p = p->next;
free(dCur);
}*/
while (p!=NULL)
{
if (p->data == data)
{
pCur = p;//1
qCur->next = p->next;//2
p = p->next;//3
free(pCur);//4
qCur = p;//5
}
else
{
qCur = p;//6
p = p->next;//7
}
}
}
int main()
{
NODE pHead = creatlist();//创建链表
pHead = insertData(pHead);//插入数据
showListData(pHead);
deleteListData(pHead);
showListData(pHead);
system("pause");
}
用STL就非常简单了,代码量还少,也不会有什么错误,但是STL那么多的函数还是要在平时的工作和学习中要多多总结
#include<iostream>
#include<list>
using namespace std;
void insertData(list<int> &ls)
{
cout << "请输入数据,以0结束:" << endl;
int data;
cin >> data;
while (data != 0)
{
ls.push_back(data);
cin >> data;
}
}
void showData(list<int> &ls)
{
cout << "链表的数据为:" << endl;
for (list<int>::iterator it = ls.begin(); it != ls.end(); it++)
{
cout << *it << " " ;
}
cout << endl;
}
void deleteData(list<int>&ls)
{
int data;
cout << "请输入你想要删除的数据:";
cin >> data;
ls.remove(data);
}
int main()
{
list<int> ls;
insertData(ls);
showData(ls);
deleteData(ls);
showData(ls);
system("pause");
}