Problem Description
设计一个整型链表类List,能够实现链表节点的插入(insert)、删除(delete),以及链表数据的输出操作(print)。
提示:链表结点用如下结构定义:
struct Node{//结点的结构
int data;
Node *next;
};
链表类List有一个数据成员head,类型是Node *
根据题目要求完善下面的程序:
#include<iostream>
using namespace std;
struct Node{//结点的结构
int data;
Node *next;
};
class List{
private:
Node* head;
public:
//你的代码将被嵌在这里
int main()
{
List list;//定义一个空链表list
list.Listinsert(0,10);//在第0个结点的后面插入值为10的新结点,也即在链表头部插入新的结点
list.Listinsert(0,66);
list.Listinsert(1,292);//在第1个结点的后面插入值为10的新结点
list.Listdelete(66);//删除链表中第一个值为66的结点
list.Listinsert(2,-2);//在第2个结点的后面插入值为-2的新结点
list.Listinsert(1,3);//在第1个结点的后面插入值为3的新结点
list.Listprint();//从头到尾输出链表结点的值,每个输出值占一行
return 0;
}
Sample Output
292 3 10 -2
void Listinsert(int i, int x);
void Listdelete(int x);
void Listprint();
List(){head=NULL;}
};
void List::Listinsert(int i, int x) {
Node *p = head;
Node *q = new Node;
q->data = x;
q->next = NULL;
if (i == 0) {
q->next = head;
head = q;
} else {
for (int j = 0; j < i - 1; j++) {
p = p->next;
}
q->next = p->next;
p->next = q;
}
};
void List::Listdelete(int x) {
Node *p = head;
Node *q = head;
if (p->data == x) {
head = p->next;
delete p;
}
else {
while (p->data != x) {
q = p;
p = p->next;
}
q->next = p->next;
delete p;
}
};
void List::Listprint() {
Node *p = head;
while (p != NULL) {
cout << p->data << endl;
p = p->next;
}
};