main中:
1)声明一个链表LA,初始化
2)遍历该链表
3)取第2号节点的值,并打印,如果非法,则打印“没有2号节点”
4)声明一个链表LB,并利用头插法使之具有n个节点,n个节点的数据由键盘输入,分别为:1,2,3,4,5
5)遍历输出LB
6)取第LB的1号节点的值,并打印,如果非法,则打印“没有1号节点”
7)取第LB的5号节点的值,并打印,如果非法,则打印“没有5号节点”
8)取第LB的6号节点的值,并打印,如果非法,则打印“没有6号节点”
7)声明一个链表LC,并利用尾插法使之具有n个节点,n个节点的数据由键盘输入,分别为:1,2,3,4,5
8)遍历输出LC
9)取第LC的0号节点的值,并打印,如果非法,则打印“没有0号节点”
10)取第LC的5号节点的值,并打印,如果非法,则打印“没有5号节点”
11)取第LC的6号节点的值,并打印,如果非法,则打印“没有6号节点”
12)清空LB
13)遍历LB
14)销毁LA,LB,LC
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LinkNode {
ElemType data;
LinkNode* next;
}*LinkList;
void InitLinkList(LinkList& L) {
LinkNode* s = new LinkNode;
s->next = NULL;
L = s;
}
void Traverse(const LinkList& L) {
LinkNode* p = L->next;
while (p) {
cout << p->data << endl;
p = p->next;
}
}
void CreatHead(LinkList& L, int n) {
L = new LinkNode; L->next = NULL;
for (int i = 0; i < n; i++) {
LinkNode* s = new LinkNode;
cin >> s->data;
s->next = L->next;
L->next = s;
}
}
void CreatRear(LinkList& L, int n) {
L = new LinkNode;
LinkNode* r = L;
for (int i = 0; i < n; i++) {
LinkNode* s = new LinkNode;
cin >> s->data;
r->next = s;
r = s;
}
r->next = NULL;
}
int GetElem(const LinkList& L, int i, ElemType& e) {
LinkNode* p = L->next; int j = 1;
while (p && j < i) {
p = p->next;
j++;
}//此时有2种可能:p空;j>=i
if (!p || i < 1) return 0;//或if (!p || i < j)
e = p->data;
return 1;
}
//销毁链表
void DestroyList(LinkList& L) {
LinkNode* p = L;
while (p)
{
L = L->next;
delete(p);
p = L;
}
}
//清空链表
void ListClear(LinkList& L) {
LinkNode* p;
while (L->next) {
p = L->next;
L->next = p->next;
delete(p);
}
}
int main() {
LinkList LA;//1)声明一个链表LA,
InitLinkList(LA);//初始化
Traverse(LA);//2)遍历该链表
int e, n = 0;
if (GetElem(LA, 2, e)) {//3)取第2号节点的值,
printf("2号节点的值为%d\n", e);//并打印,
}
else {
printf("没有2号节点\n");//如果非法,则打印“没有2号节点”
}
LinkList LB;//4)声明一个链表LB,并利用头插法使之具有n个节点,n个节点的数据由键盘输入,分别为:1,2,3,4,5
cout<<"请输入节点个数:";
cin >> n;
CreatHead(LB, n);
Traverse(LB);//5)遍历输出LB
if (GetElem(LB, 1, e)) {
printf("1号节点的值为%d\n", e);//6)取第LB的1号节点的值,并打印,如果非法,则打印“没有1号节点”
}
else {
printf("没有1号节点\n");
}
if (GetElem(LB, 5, e)) {
printf("5号节点的值为%d\n", e);//7)取第LB的5号节点的值,并打印,如果非法,则打印“没有5号节点”
}
else {
printf("没有5号节点\n");
}
if (GetElem(LB, 6, e)) {
printf("6号节点的值为%d\n", e);//8)取第LB的6号节点的值,并打印,如果非法,则打印“没有6号节点”
}
else {
printf("没有6号节点\n");
}
LinkList LC; //7)声明一个链表LC,并利用尾插法使之具有n个节点,n个节点的数据由键盘输入,分别为:1,2,3,4,5
cout << "请输入节点个数:" ;
cin >> n;
CreatRear(LC, n);
Traverse(LC);//8)遍历输出LC
if (GetElem(LC, 0, e)) {
printf("0号节点的值为%d\n", e);//9)取第LC的0号节点的值,并打印,如果非法,则打印“没有0号节点”
}
else {
printf("没有0号节点\n");
}
if (GetElem(LC, 5, e)) {
printf("5号节点的值为%d\n", e);//9)取第LC的5号节点的值,并打印,如果非法,则打印“没有5号节点”
}
else {
printf("没有5号节点\n");
}
if (GetElem(LC, 6, e)) {
printf("6号节点的值为%d", e);//9)取第LC的6号节点的值,并打印,如果非法,则打印“没有6号节点”
}
else {
printf("没有6号节点\n");
}
ListClear(LB);//12)清空LB
Traverse(LB);//13)遍历LB
DestroyList(LA);//14)销毁LA,LB,LC
DestroyList(LB);
DestroyList(LC);
}