1005: 单向链表(2)
Description
已知一个有序链表类LinkSortList及main函数的部分代码如下,请完成LinkSortList类的成员函数,得到对应的运行结果,勿改动main函数。
//有序表类
template <class T>
class LinkSortList
{
public:
LinkSortList( ); //建立只有头结点的空链表
~LinkSortList(); //析构函数
void Insert(T x); //在有序单链表中插入元素x使序列仍有序
int Length(); //求表长
int DeleteOdd(); //在单链表中删除所有奇数,返回值为奇数个数
void DispList( ); //遍历有序单链表,按序号依次输出各元素
private:
Node<T> *first; //单链表的头指针
};
int main( ){
LinkSortList<int> sa;
int x;
while(1)
{
cin>>x;
if(!x)break;
sa.Insert(x);
}
sa.DispList();
int count=sa.DeleteOdd();
cout<<"Count of deleted odds:"<<count<<endl;
sa.DispList();
return 0;
}
Input
Output
Sample Input
#include <iostream>
using namespace std;
template <class T>
struct Node {
T data;
Node<T> *next;
};
template<class T>
class LinkSortList {
public:
LinkSortList(); //建立只有头结点的空链表
~LinkSortList(); //析构函数
void Insert(T x); //在有序单链表中插入元素x使序列仍有序
int Length(); //求表长
int DeleteOdd(); //在单链表中删除所有奇数,返回值为奇数个数
void DispList(); //遍历有序单链表,按序号依次输出各元素
private:
Node<T> *first; //单链表的头指针
};
template<class T>
LinkSortList<T>::LinkSortList() {
first = new Node<T>;
first->next = NULL;
}
template<class T>
LinkSortList<T>::~LinkSortList() {
while (first) {
Node<T> *p = first;
first = first->next;
delete p;
}
}
template<class T>
void LinkSortList<T>::Insert(T x) {
Node<T> *p = first;
while (p->next) {
if(p->next->data > x)break;
p = p->next;
}
Node<T> *s = new Node<T>;
s->data = x;
s->next = p->next;
p->next = s;
}
template<class T>
int LinkSortList<T>::Length() {
int i = 0;
Node<T> *p = first->next;
while (p) {
p = p->next;
i++;
}
return i;
}
template<class T>
int LinkSortList<T>::DeleteOdd() {
Node<T> *p = first, *q = NULL;
int count = 0;
while (p->next) {
q = p->next;
if(q->data & 1){
count++;
p->next = q->next;
delete q;
} else {
p = q;
}
}
return count;
}
template<class T>
void LinkSortList<T>::DispList() {
Node<T> *p = first->next;
cout << "The length:" << Length() << endl;
cout << "The elements:";
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main() {
LinkSortList<int> sa;
int x;
while (1) {
cin >> x;
if (!x)break;
sa.Insert(x);
}
sa.DispList();
int count = sa.DeleteOdd();
cout << "Count of deleted odds:" << count << endl;
sa.DispList();
return 0;
}
Sample Output
The length:8 The elements:1 5 7 32 34 42 56 233 Count of deleted odds:4 The length:4 The elements:32 34 42 56