#include<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList;
bool initLinkList(LinkList& L) {
L = new LNode;
if (!L)
return false;
L->next = NULL;
return true;
}
bool destroyLinkList(LinkList& L) {
LNode* p = L->next;
while (L) {
delete L;
L = p;
p = p->next;
}
return true;
}
void printLinkList(LinkList L) {
while (L->next) {
cout << L->next->data << " ";
L = L->next;
}
cout << endl;
}
void creatLinkList_head(LinkList& L) {
int n, num;
cout << "输入结点个数:";
cin >> n;
LNode* p;
for (int i = 0; i < n; i++) {
cin >> num;
p = new LNode;//这句不能忘,每次有新节点就要new,又不花钱
p->data = num;
p->next = L->next;
L->next = p;
}
}
void creatLinkList_tail(LinkList& L) {
int n, num;
cout << "输入结点个数:";
cin >> n;
LNode* p;
LNode* tail = L;
for (int i = 0; i < n; i++) {
p = new LNode;//把分配的地址返回给p指针,是LNode类型的
cin >> num;
p->data = num;
tail->next = p;
tail = p;
}
tail->next = NULL;
}
LNode* getLinkList(LinkList L, int n) {
int i=1;//注意一下下i,和求表长不一样哦
LNode* p = L->next;
if (n < 0)
return L;
while (p&&i<n) {
p = p->next;
i++;
}
return p;
}
bool insertLinkList(LinkList& L, int n,int e) {
LNode* p = getLinkList(L, n-1);
if (!p)
return false;
LNode* s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
bool deleteLinkList(LinkList& L, int n) {
LNode* p = getLinkList(L, n - 1);
if (!p || !p->next)//完善
return false;
LNode* s = p->next;
p->next = s->next;
delete s;
return true;
}
int getlenLinkList(LinkList L) {
int n=0;
LNode* p = L->next;
while (p) {
n++;
p = p->next;
}
return n;
}
int main() {
LinkList L;
initLinkList(L);
creatLinkList_head(L);
//creatLinkList_tail(L);
printLinkList(L);
/*LNode* p = getLinkList(L, 3);
if (p)
cout << p->data << endl;
else
cout << "返回是NULL呀" << endl;*/
/*if (insertLinkList(L, 3, 33) == true)
printLinkList(L);
else
cout << "没插进去,嘿嘿" << endl;*/
/*if (deleteLinkList(L, 3) == true)
printLinkList(L);
else
cout << "没删掉,嘿嘿" << endl;*/
int n = getlenLinkList(L);
cout <<"表长:"<< n << endl;
destroyLinkList(L);
return 0;
}
复习,单链表
最新推荐文章于 2024-07-21 11:20:00 发布