标签:lis 单链表 new ade delete let lin node 指针
链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那么如何表示逻辑上的相邻关系呢,我们可以给每一个元素附加一个指针域,用来
指向下一个元素的存储位置。
1.每个节点由指针域跟数据域组成
2.指针域中存储的指针指向下一个元素的地址
其结构体定义如下:
typedef struct Node{
int data;
Node* next;
}LinkList,LinkNode;
//LinkList:表头 ListNode:节点
bool ListInit(LinkList*& L) {
L = new LinkList;
if (!L) return false;//初始化失败
L->next = NULL;
L->data = -1;
return true;
}
bool addListFront(LinkList* &L,LinkNode* &N) {//插入的数据在链表前面
if (!L || !N) {
cout << "插入失败!" << endl;
return false;
}
N->next = L->next;
L->next = N;
return true;
}
bool addListEnd(LinkList*& L, LinkNode*& N) {//插入在最后面
if (!L || !N) {
cout << "插入失败!" << endl;
return false;
}
LinkList* last = NULL;
last = L;
while (last->next) last = last->next;
last->next = N;
N->next = NULL;
return true;
}
bool insertList(LinkList*& L, int index,int e) {
if (!L) {
return false;
}
LinkNode* N = new LinkNode;
N->data = e;
LinkList* nodeI = L;
int count = 0;
while (nodeI->next&&count<index-1) {
nodeI = nodeI->next;
count++;
}
if (!nodeI||count>index-1) {//!nodeI时表示index的值传入过大,count>=index-1时表示传入的index是非正数
return false;
}
N->next = nodeI->next;
nodeI->next = N;
return true;
}
bool listGetElem(LinkList*& L, int index, int& e) {
if (!L) {
return false;
}
else if (!L->next) {
return false;
}
LinkNode* p = L->next;
int count = 1;
while (p&&count<index){
p = p->next;
count++;
}
if (!p || count > index) {
return false;
}
e = p->data;
return true;
}
bool listHadElem(LinkList*& L, int e, int& index) {
if (!L || !L->next) {
index = 0;
return false;
}
index = 1;
LinkNode* p = L->next;
while (p&&p->data!=e) {
p = p->next;
index++;
}
if (!p) {
return false;
}//没有这个值
return true;
}
bool LinkDelete(LinkList*&L,int index){
if (!L) {
return false;
}
else if (!L->next) {
//cout << "链表中没有元素!" << endl;
return false;
}
LinkNode* p = L;
int count = 0;
while (p && count < index-1) {
p = p->next;
count++;
}
if (!p || count > index-1) {
//cout << "查找失败!" << endl;
return false;
}
LinkNode* node = p->next;
if (!node) return false;
p->next = node->next;
delete node;
return true;
}
bool LinkDestroy(LinkList*& L) {
if (!L) {
return false;
}
LinkNode* p1 = L;
while (p1) {
L=L->next;
cout << "删除元素:" << p1->data << endl;
delete p1;
p1 = L;//最后L=NULL了 是因为中间把L->next的值赋给了L
}
return true;
}
void printL(LinkList* &L) {
if (!L|| !L->next) {
cout << "链表中不存在元素,或不存在此链表" << endl;
return;
}
LinkNode* p = L->next;
while(p) {
cout << p->data << "\t";
p = p->next;
}
}
标签:lis 单链表 new ade delete let lin node 指针
原文地址:https://www.cnblogs.com/Ybossy/p/12813011.html