题目描述
已知带头结点的单链表的类界面和部分函数定义
请根据主函数的要求,完成单链表类的其他函数填空
输入
第1行先输入n表示有n个数据,接着输入n个数据
第2行输入要插入的位置和新数据
第3行输入要插入的位置和新数据
第4行输入要删除的位置
第5行输入要删除的位置
第6行输入要查找的位置
第7行输入要查找的位置
输出
数据之间用空格隔开
第1行输出创建后的单链表内容
接着每一次操作后,如果操作成功则输出整个单链表内容,如果操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出表内容
输入输出样例
输入样例1 <-复制
5 1 2 3 4 5
6 666
9 99
1
6
1
0
输出样例1
1 2 3 4 5
1 2 3 4 5 666
error
2 3 4 5 666
error
2
error
AC代码
#include <iostream>
using namespace std;
#define OK 0
#define ERROR -1
//结点类定义
class ListNode {
public:
int data;
ListNode* next;
ListNode()
{
data = -9999, next = NULL;
}
ListNode(int item, ListNode* pt)
{
data = item, next = pt;
}
};
class LinkList {
//带头结点的单链表,位置从0到n,0是头结点,1是首结点,n是尾结点
private:
ListNode* head; //头结点
int size; //表长
ListNode* index(int i); //定位函数,返回第i个结点
public:
LinkList(); //构造函数,创建头结点
~LinkList(); //析构函数,逐个结点回收
int LL_insert(int item, int i); //第i位置插入元素,操作成功或失败返回OK或ERROR
int LL_del(int i); //删除第i位置的元素,操作成功或失败返回OK或ERROR
int LL_get(int i); //获取位置i的元素的数值,操作成功或失败返回OK或ERROR
void LL_print(); //打印单链表所有数据
};
//提示:index函数可以不使用。如果不用要在填空区域定义一个空函数体保证语法正确性
LinkList::LinkList() : size(0)
{
head = new ListNode();
}
LinkList::~LinkList() //要逐个结点回收
{
ListNode* p, * q;
p = head->next;
while (p != NULL) {
q = p; p = p->next;
delete q;
}
size = 0;
head->next = NULL;
}
//以下完成其他类函数定义
/********** Write your code here! **********/
ListNode* LinkList::index(int i)//这个函数用不到所以乱写的
{
ListNode* s,a;
s = &a;
return s;
}
int LinkList::LL_insert(int item, int i)
{
if (i <= 0 || i > size+1)
return ERROR;
ListNode* p;
p = head;
int j;
for (j = 1; j < i; j++)
p = p->next;
ListNode* s = new ListNode(item,p->next);
p->next = s;
size++;
return OK;
}
int LinkList::LL_del(int i)
{
if (i <= 0 || i > size)
return ERROR;
ListNode* p;
p = head;
int j;
for (j = 1; j < i; j++)
p = p->next;
ListNode* s = p->next;
p->next = s->next;
delete s;
size--;
return OK;
}
int LinkList::LL_get(int i)
{
if (i <= 0 || i > size)
return ERROR;
ListNode* p;
p = head;
int j;
for (j = 1; j < i; j++)
p = p->next;
return p->next->data;
}
void LinkList::LL_print()
{
ListNode* p;
p = head->next;
int j;
for (j = 0; j < size; j++)
{
cout << p->data;
if (j != size - 1)
cout << " ";
else
cout << endl;
p = p->next;
}
}
/*******************************************/
//主函数定义
int main()
{
int i, t, temp, pos;
LinkList sl; //创建单链表
//初始化链表
cin >> t; //输入初始长度
for (i = 1; i <= t; i++)
{
cin >> temp; sl.LL_insert(temp, i);
}
sl.LL_print();
//两次插入
for (i = 0; i < 2; i++)
{
cin >> pos >> temp;
t = sl.LL_insert(temp, pos);
if (t == ERROR) cout << "error" << endl;
else sl.LL_print();
}
//两次删除
for (i = 0; i < 2; i++)
{
cin >> pos;
t = sl.LL_del(pos);
if (t == ERROR) cout << "error" << endl;
else sl.LL_print();
}
//两次查找
for (i = 0; i < 2; i++)
{
cin >> pos;
t = sl.LL_get(pos);
if (t == ERROR) cout << "error" << endl;
else cout << t << endl;
}
return 0;
}
(by 归忆)