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");
}

猜你喜欢

转载自blog.csdn.net/trainhui/article/details/86644225