目录
题目要求:
本题要求实现一个函数,删除单链表中的第i个位置上和第j个位置上的数据,删除的数据保存在a和b中。(0<i<j)
函数接口定义:
int delete2(LinkList &L, int i, int j, ElemType &a, ElemType &b);
解释接口参数:其中L
, i
,j
,a
,b
都是用户传入的参数。 L
是指向单链表头结点的指针,单链表结点有两个成员,一个是data域,存放该结点的数据元素,不特别说明的话元素类型为整型,一个是next域 ,指向下一个结点; i
和j
是指删除的位置。a
和b
是指删除的两个元素,通过delete2
函数实现记录。函数返回的值为0或1或2,0代表 i
和 j
位置都不正确,1代表删除第 i
个位置成功,但 j
位置不正确;2代表两个位置上的元素都删除成功。
裁判测试程序样例:
#include<iostream>
using namespace std;
typedef int Status;
typedef int ElemType;
typedef struct node {
ElemType data;
struct node *next;
}LNode,*LinkList;
Status InitList_Lk(LinkList &L) ; // 单链表的初始化,已实现,不用再定义
void CreatList(LinkList &L,int n); //创建含有n个元素的单链表,已实现,不用再定义
void ViewList(LinkList L) ;//打印单链表,已实现,不用再定义
int delete2(LinkList &L, int i, int j, ElemType &a, ElemType &b);//要实现的函数
int main()
{
LinkList L;
ElemType a, b;
int i,j,n,flag;
InitList_Lk(L);
cin >> n;
CreatList(L, n);
cin >> i>>j;
flag = delete2(L, i, j, a, b);
if (flag == 0)
{
cout << "i and j all error!";
}
else if (flag == 1)
{
cout << "j error\n";
cout << "a is:"<< a;
}
else {
cout << "a is:"<< a<<",b is:" << b;
}
return 0;
}
输入样例:
在这里给出一组输入。例如:
10
34 56 12 5 7 55 78 2 90 6
2 7
输出样例:
在这里给出相应的输出。例如:
a is:56,b is:78
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
学习时间:
2022/10/6
- 星期四上午10:00
随便写写的答案:
int delete2(LinkList &L,int i,int j,ElemType &a,ElemType &b)
{
LinkList p,q;
int m = 1;
p = L;
while (p && m<i)
{
p = p->next;
m++;
}
if (!p || m > i)
return 0;
q = p->next;
a = q->data;
p->next = q->next;
delete q;
while(p && m<(j-1))
{
p = p->next;
m++;
}
if(!p || m > (j-1))
return 1;
q = p->next;
b = q->data;
p->next = q->next;
delete q;
return 2;
}