单链表的删除数据元素为偶数的结点

pbfordream 2012-11-03 04:40:39
#include<iostream>
using namespace std;
template<class T>
struct Node
{
T data;
Node<T>*next;
};
template<class T>
class linklist
{
public:
Node<T>*first;//设置头指针
linklist();//建立空表
linklist(T a[],int n);//构造由数组提供的元素提供
~linklist();//析构
void print();//遍历
friend void Divide();
};
template<class T>
linklist<T>::linklist()
{
first=new Node<T>;NULL;
first=NULL;
}
template<class T>
linklist<T>::linklist(T a[],int n)//头插法
{
first=new Node<T>;//头结点的data域为空
first->next=NULL;
Node<T>*p=first;//工作指针的定义
for(int i=0;i<n;i++)
{
Node<T>*s=new Node<T>;
s->data=a[i];
s->next=p->next;
p->next=s;
p=s;
}
}
template<class T>
linklist<T>::~linklist()
{
clear();
}
template<class T>
void linklist<T>::clear()//删除
{
while(first!=NULL)
{
Node<T>*q=first;
first=first->next;//指针后移必须在删除结点之前完成
delete q;
}
}
template<class T>
void Divide(linklist&L)
{
Node<T>*p,*q,*newfirst;
p=L.first->next;q=L.first;
newfirst=new Node<T>();
newfirst->next=NULL;
Node<T>*h=newfirst;
while(p!=NULL)
{
if(p->data%2==0)
{q=p;p=p->next;}
else
{ p->next=h->next;
h->next=p;
h=p;
p=p->next;
q->next=p;
}
}
}
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,23};
linklist<int> list(a,10);
list.print();
Divide(list);
list.print();
}
目的就是将已经建立好的单链表中的数据元素为奇数的通过一个友元函数来删除,但是总是有有模板类型的错误,模板不怎么熟悉请教啊啊,谢谢回复的人
...全文
775 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
漫步者、 2012-11-05
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

template <typename T> class linklist;
template<class T1>
struct Node
{    
	T1 data;
	Node<T1>*next;
};

template<class T>
class linklist
{  
public:
	Node<T>*first;//设置头指针
	linklist();//建立空表
	linklist(T a[],int n);//构造由数组提供的元素提供
	~linklist();//析构
	void print();//遍历
	template<typename U>
	friend void Divide(linklist<U>&L); //添加你的参数
	void clear(); //请添加这个函数
};

template<class T>
linklist<T>::linklist()
{
	first=new Node<T>;NULL;
	first=NULL;
}
template<class T>
linklist<T>::linklist(T a[],int n)//头插法
{   
	first=new Node<T>;//头结点的data域为空
	first->next=NULL;
	Node<T>*p=first;//工作指针的定义
	for(int i=0;i<n;i++)
	{
		Node<T>*s=new Node<T>;
		s->data=a[i];
		s->next=p->next;
		p->next=s;
		p=s;
	}
}
template<class T>
linklist<T>::~linklist()
{
	clear();
}
template<class T>
void linklist<T>::clear()//删除
{
	while(first!=NULL)
	{
		Node<T>*q=first;
		first=first->next;//指针后移必须在删除结点之前完成
		delete q;
	}
}

template<typename U>
void Divide(linklist<U>&L)//
{
	Node<U>*p,*q,*newfirst;
	p=L.first->next;q=L.first;
	newfirst=new Node<U>();
	newfirst->next=NULL;
	Node<U>*h=newfirst;
	while(p!=NULL)
	{     
		if(p->data%2==0)
		{q=p;p=p->next;}
		else
		{

	
			p->next=h->next;
			h->next=p;
			h=p;
			p=p->next;
			q->next=p;
		}
	
	}
}

template <typename T>
void linklist<T>::print()
{

	/*添加你的代码*/
}
void main()
{
	int a[10]={1,2,3,4,5,6,7,8,9,23};
	linklist<int> list(a,10);
	list.print();
	Divide(list);
	list.print();
}
yh_no_code 2012-11-03
  • 打赏
  • 举报
回复
出错的信息是什么啊??

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧