肇砖oj题,仅供参考,不怕被钟sir封号三周你就抄
Description
设计一个整型链表类?List,能够实现链表节点的插入?insert()?、按位置删除节点?deleteByPos()?、按值删除节点?deleteByVAlue()?,以及链表数据的输出操作?print()。
构造函数、析构函数这些都不用说也知道要写的吧。
提示:链表节点用如下结构定义:
struct?Node?{?//?节点的结构
???int?data;
???Node?*next;
???Node()?{
???????data?=?0;
???????next?=?nullptr;
???}
???~Node()?{?}
};
链表类?List?有一个数据成员?head,类型是?Node *
根据题目要求完善下面的程序:
Input
#include?<iostream>
using?namespace?std;
///?节点的结构
struct?Node?{
???int?data;
???Node?*next;
???Node()?{
???????data?=?0;
???????next?=?nullptr;
??}
??~Node()?{?}
};
///?链表类
class?List?{
private:
???Node?*head;
public:
??你写的代码放在这里
};
int?main()?{
???List?l1;??///?创建一个空链表对象?l1
???l1.insert(?0,?10?);?///?在第?0?个节点的后面插入值为?10?的新节点,也即在链表头部插入新的节点
???l1.insert(?0,?66?);
???l1.insert(?1,?292?);??///?在第?1?个节点的后面插入值为?10?的新节点
???l1.print(?);??///?从头到尾输出链表节点的值,每个值后跟一空格
???l1.deleteByValue(?66?);??///?删除链表中第一个值为?66?的节点
???l1.print(?);
???l1.insert(?2,?-2?);??///?在第?2?个节点的后面插入值为?-2?的新节点
???l1.insert(?1,?3?);??///?在第?1?个节点的后面插入值为?3?的新节点
???l1.print(?);
???l1.deleteByPos(?2?);??///?删除链表中第2个位置的节点,那么“3”就被删掉了
???l1.print(?);
???l1.deleteByValue(?999?);
???l1.print(?);
???return?0;
}
Output
见样例输出
Sample Input
NULL
Sample Output
66 292 10? 292 10? 292 3 10 -2? 292 10 -2? not found data: 999 292 10 -2?
?
#include <iostream>
using namespace std;
/// 节点的结构
struct Node {
int data;
Node *next;
Node() {
data = 0;
next = nullptr;
}
~Node() { }
};
/// 链表类
class List {
private:
Node *head;
public:
List(){
head=new Node;
}
~List(){
Node *p=head,*r;
while(p){
r=p;
delete r;
p=p->next;
}
}
void insert(int n,int m){
int i=0;
Node *r,*p;
r=head;
while(i<=n){
if(r->next==nullptr) r->next =new Node;
r=r->next;
i++;
}
p=new Node;
p->data=m;
p->next=r->next;
r->next=p;
}
void print(){
Node *p;
p=head->next;
while(p->next){
p=p->next;
cout<<p->data<<" ";
}
cout<<endl;
}
void deleteByValue(int n){
Node *r,*p=head;
while(p->next->next){
p=p->next;
if(p->next->data==n){
r=p->next;
p->next=r->next;
delete r;
return ; }
}
cout<<"not found data: "<<n<<endl;
}
void deleteByPos(int n){
Node *p=head,*r;
int i=0;
while(i<n){
p=p->next;
i++;
}
r=p->next;
p->next=r->next;
delete r;
}
};
int main() {
List l1; /// 创建一个空链表对象 l1
l1.insert( 0, 10 ); /// 在第 0 个节点的后面插入值为 10 的新节点,也即在链表头部插入新的节点
l1.insert( 0, 66 );
l1.insert( 1, 292 ); /// 在第 1 个节点的后面插入值为 10 的新节点
l1.print( ); /// 从头到尾输出链表节点的值,每个值后跟一空格
l1.deleteByValue( 66 ); /// 删除链表中第一个值为 66 的节点
l1.print( );
l1.insert( 2, -2 ); /// 在第 2 个节点的后面插入值为 -2 的新节点
l1.insert( 1, 3 ); /// 在第 1 个节点的后面插入值为 3 的新节点
l1.print( );
l1.deleteByPos( 2 ); /// 删除链表中第2个位置的节点,那么“3”就被删掉了
l1.print( );
l1.deleteByValue( 999 );
l1.print( );
return 0;
}
|