描述
定义单链表类,创建带头结点的单链表(节点类型为整型数据),要求包含以下成员函数:
头插法创建单链表(利用构造函数实现)
尾插法创建单链表(重载构造函数实现)
链表的遍历
按值删除一个节点
按位置删除一个节点
链表的析构
输入
输入一组数据,以尾插法的形式创建单链表(0表示输入结束)(构造第一个链表)
输入一组数据,以头插法的形式创建单链表(0表示输入结束)(构造第二个链表)
输入要删除元素的值(在尾插法创建的链表中进行改操作)
输入要删除元素的位置(在尾插法创建的链表中进行改操作)输出
输出尾插法创建链表的结果
输出头插法插法创建链表的结果
输出按值删除之后链表中剩余的元素(若删除的元素不存在,输出Error)
输出按位置删除之后链表中剩余的元素(若删除的元素不存在,输出Error样例输入
1 2 3 4 5 0 1 2 3 4 5 0 2 0
样例输出
1 2 3 4 5 5 4 3 2 1 1 3 4 5 Error
其实我是hi拒绝写链表的,数组很简单的就能实现了。
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<queue>
#include<set>
#include<map>
#include<iomanip>
#include<math.h>
using namespace std;
typedef long long ll;
typedef double ld;
const int INF=0x3f3f3f3f;
int i,j,k;
int n,m,t;
int x,y;
int u,v,w;
int ans,res,cnt,temp,sum;
struct Node
{
int data;
Node *next;
};
class Linklist
{
public:
Linklist();
Linklist(int a[],int n);
void print();
int delete_x(int x);
int delete_i(int i);
~Linklist();
private:
Node*first;
};
Linklist::Linklist()//头插法
{
int x=0;
first=new Node;
first->next=NULL;
Node *s;
while(scanf("%d",&x))
{
if(x==0) break;
s=new Node;
s->data=x;
s->next=first->next;
first->next=s;
}
}
Linklist::Linklist(int a[],int n)//尾插法
{
first=new Node;first->next=NULL;
Node*s,*p;
p=first;
for(int i=1;i<=n;i++)
{
s=new Node;
s->data=a[i];
p->next=s;
p=s;
}
p->next=NULL;
}
void Linklist::print()
{
Node* p;
p=first->next;
while(p)
{
if(p->next==NULL)
printf("%d\n",p->data);
else
printf("%d ",p->data);
p=p->next;
}
}
int Linklist::delete_x(int x)
{
Node *p,*q;
p=first;
while(p->next)
{
if((p->next)->data==x)
{
q=p->next;
p->next=q->next;
delete q;
return 1;
}
p=p->next;
}
return 0;
}
int Linklist::delete_i(int i)
{
Node *p,*q;int j=0;
p=first;
while(j<i&&p->next)
{
if(j==i-1)
{
q=p->next;
p->next=q->next;
delete q;
return 1;
}
j++;
}
return 0;
}
Linklist::~Linklist()
{
Node *p;
while(first)
{
p=first->next;
delete first;
first=p;
}
}
int main()
{
int a[10000],num=0,x;
while(scanf("%d",&x))
{
if(x==0) break;
a[++num]=x;
}
Linklist wei(a,num);
Linklist tou;
wei.print();
tou.print();
int temp1,temp2;
scanf("%d%d",&temp1,&temp2);
if(wei.delete_x(temp1))
{
wei.print();
}
else
{
printf("Error\n");
}
if(wei.delete_i(temp2))
{
wei.print();
}
else
{
printf("Error\n");
}
return 0;
}