数据结构——单链表(不带头结点)
程序员文章站
2024-03-21 14:49:16
...
以下单链表的操作为不带头结点的单链表,包含了 按位序插入、按位序删除、判空。
指定结点的前插、后插操作,查找,尾插法、头插法等操作均在单链表(带头结点)那一文章中:https://blog.csdn.net/qq_43489671/article/details/106722953
#include <iostream>
using namespace std;
typedef struct LNode {
int data; //数据域
struct LNode* next; //指向下一个结点
}LNode,* LinkList;
//初始化单链表
bool InitList(LinkList& L) {
L = NULL;
return true;
}
//按位序插入
bool ListInsert(LinkList& L, int i, int e) {
if (i < 1)
return false;
if (i == 1) {
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = L;
L = s;
return true;
}
LNode* p = L;
int j = 1;
while (p != NULL && j < i - 1) {
p = p->next;
j++;
}
if (p == NULL)
return false;
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
//按位序删除
bool ListDelete(LinkList& L, int i, int& e) {
if (i < 1)
return false;
if (i == 1) {
LNode* p = L;
e = p->data;
L = p->next;
free(p);
return true;
}
LNode* p = L;
int j = 1;
while (p != NULL && j < i - 1) {
p = p->next;
j++;
}
if (p == NULL)
return false;
if (p->next == NULL)
return false;
LNode* q = p->next;
e = q->data;
p->next = q->next;
free(q);
return true;
}
//判断单链表是否为空
bool Empty(LinkList L) {
return (L == NULL);
}
上一篇: 数据结构:单链表(不带头结点)
下一篇: Java操作水晶报表