删除单链表中的偶数元素

nyj_vbnet 2006-10-31 11:31:34

我写的那个删除偶数原素的函数void DelOU_LinkList(LinkList &L);有错,但不会改,请各位指点.

#include<iostream>
#include<cstdlib>
#define ElemType int

typedef int Status;
typedef struct lnode
{
ElemType data;
struct lnode *next;
}LNode,*LinkList;

LinkList myList;

void CreateList_LinkList(LinkList &L,int n,char createBy);
void viewList(LinkList L);
void DelOU_LinkList(LinkList &L);

int main()
{
int createNum;
char createBy;
cout << "----链表示例----" << endl;
cout << "请输入你要建立的链表的长度:_\b";
cin >> createNum;
do
{
cout << endl << "请输入你建立表的方式(随机->0输入->其他):_\b";
cin >> createBy;
cout << endl;
if(createBy!='0'&&createBy!='1') cout << "你的输入有误,请重试";
}while(createBy!='0'&&createBy!='1');
CreateList_LinkList(myList,10,createBy);
cout << "遍历表:" << endl;
viewList(myList);
system("pause");
//cout << "del ou:" << endl;
//DelOU_LinkList(myList);
viewList(myList);





system("PAUSE");
return 0;
}

void CreateList_LinkList(LinkList &L,int n,char createBy)
{
LinkList p;
//先过来一个头节点
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;

//开始建立链表
for(int i=0;i<n;i++)
{
p = (LinkList)malloc(sizeof(LNode));
if(createBy=='0')
{
p->data = rand()%101;
}
else
{

cout << "请输入你第" << i+1 << "个数:_\b" ;
cin >> p->data;
cout << endl;

}
p->next = L->next;
L->next = p;
}
return;

}

void viewList(LinkList L)
{
int i=0;
LinkList p;
p = L->next;
cout << endl << "\t\t==========遍历开始==========" << endl;
while(p)
{
if(i%2==0) cout << endl;
cout << "\tmyList.data[" << i << "]= " << p->data;
i++;
p = p->next;
}
if(i==0) cout << "\t表还是空表" << endl;
cout << endl << "\t\t==========遍历结束==========" << endl;
return;

}

void DelOU_LinkList(LinkList &L)
{
LinkList p,q,t;
p=L;
q =p;
while(q)
{
t =p;
q = p->next->next;
if(p->next->data%2==0)
{
if(q)
{
t->next = q;
free(p->next);
}
else
{
t->next = NULL;
free(p->next);
}

}
p = q;


}
return;
}

void Sort_LinkList()

...全文
655 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
OOPhaisky 2006-10-31
  • 打赏
  • 举报
回复
就是顺序访问,逐个判断是否为偶数,然后就是指针操作+delete了。
至于楼主的程序,建议自己debug一下,这样才会有提高。
Andrionda 2006-10-31
  • 打赏
  • 举报
回复
每次取到 data
if(p->data%2 == 0)
{
delete 操作
同时连接后面的链.
}
else
next;
watermelontx 2006-10-31
  • 打赏
  • 举报
回复
用一个判断偶数的函数..
单链表删除函数中加上对上面判断函数,选出要删除的元素..
飞哥 2006-10-31
  • 打赏
  • 举报
回复
就是查找操作+得了特操作~
选题1:(易)实现顺序表各种基本运算的算法 参考实验指导书“实验题 1:实现顺序表各种基本运算的算法实现”。 选题2:(易)实现单链表各种基本运算的算法 参考实验指导书“实验题 2:实现单链表各种基本运算的算法实现”。 选题3:(易)编写算法实现二个有序的线性表的合并问题(存储结构可选:顺序表/单链表)。 参考课件“chap002线性表.ppt”相关例题。 选题4:(难)运用单向循环链表实现约瑟夫环的问题。 参考实验指导书“实验题 4:运用单向循环链表实现约瑟夫环的问题”。 选题5:(易)将元素X插入到链表合适的位置。 完成习题集的算法并编程实现:2.11。参考课件“chap002线性表习题讲解.ppt”2.11。 带头结点的单链表L,其有n 个元素非递减有序排列,将元素X插入到链表合适的位置。 提示:先创建链表,其元素值可由随机函数按阶段生成或键盘输入,先打印初始链表数据,然后插入新结点,再打印结果链表。 插入前: 插入后: 选题6:(易)删除所有大于mink且小于maxk的元素。 已知线性表元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除所有大于mink且小于maxk的元素(若表存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。 参考实验指导书“实验题 5:删除有序单链表所有大于 mink 且小于 maxk的元素”。 选题7:(等)删除单链表多余元素。 完成习题集的算法并编程实现:2.20。参考课件“chap002线性表习题讲解.ppt”2.20。 已知单链表元素有序,写一算法,删除所有值相同的多余元素(使操作后线性表元素值均不相同),同时释放被删结点空间。 选题8:(易)实现单链表的就地逆置。 完成习题集的算法并编程实现:2.22。参考课件“chap002线性表习题讲解.ppt”2.22。 试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2...,an)逆置为(an,an-1,...,a1)。 选题9:(难)单链表拆分。 将带头结点的单链表LA分拆成LB和LC两条单链表,LA的data域为奇数的节点依次进入LB,而为偶数的节点进入LC。 参考课件“chap002线性表习题讲解.ppt”第35页例题。

64,646

社区成员

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

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