单链表

本文最后更新于 2025年8月25日 晚上

1、初始化

image-20250823104020878.png

1
2
3
4
5
6
7
8
9
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;

typedef enum Status {
OK = 1,
ERROR = 0
} Status;

image-20250823104239699.png

1
2
3
4
5
6
Status InitList_L(LinkList L) {
L = (LinkList) malloc(sizeof(LNode));
L->next = NULL;
// free(L);
return OK;
}

2、清空链表

image-20250823104337285.png

1
2
3
4
Status ListEmpty(LinkList L) {
if (L->next) return OK;
else return ERROR;
}

3、销毁链表

image-20250823104513151.png

1
2
3
4
5
6
7
8
void ListDestroy(LinkList L) {
LinkList p;
while (L != NULL) {
p = L;
L = L->next;
free(p);
}
}

4、清空链表

image-20250823104733119.png

1
2
3
4
5
6
7
8
9
10
void ListClean(LinkList L) {
LinkList p, q;
p = L->next;
while (p) {
q = p->next;
free(p);
p = q;
}
L->next = NULL;
}

5、获取链表长度

image-20250823104846475.png

1
2
3
4
5
6
7
8
9
Status GetListLength(LinkList L) {
int i = 0;
LinkList p = L->next;
while (p) {
p = p->next;
i++;
}
return i;
}

6、获取链表元素

image-20250823104951590.png

1
2
3
4
5
6
7
8
9
10
11
Status GetListElem(LinkList L, int i, int *elem) {
int temp = 1;
LinkList p = L->next;
while (p && temp < i) {
p = p->next;
temp++;
}
if (!p || temp > i) return ERROR;
*elem = p->data;
return OK;
}

7、获取链表元素位置

image-20250823105057767.png

1
2
3
4
5
6
7
8
9
int GetListPosition(LinkList L, int elem) {
LinkList p = L->next;
int temp = 1;
while (p && p->data != elem) {
p = p->next;
temp++;
}
return temp;
}

8、插入链表元素

image-20250823105220238.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Status InsertList(LinkList L, int i) {
LinkList p = L->next;
int temp = 1;
while (p && temp < i - 1) {
p = p->next;
temp++;
}
if (!p || temp > i - 1) return ERROR;
LinkList Temp = (LinkList) malloc(sizeof(LNode));
Temp->next = p->next;
p->next = Temp;

return OK;
}

9、删除链表元素

image-20250823105256997.png

1
2
3
4
5
6
7
8
9
10
11
12
13
Status DeleteList(LinkList L, int i) {
LinkList p = L->next;
int temp = 1;
while (p && temp < i - 1) {
p = p->next;
temp++;
}
if (!p || temp > i - 1) return ERROR;
LinkList q = p->next;
p->next = q->next;
free(q);
return OK;
}

10、头插法创建链表

image-20250823105358666.png

1
2
3
4
5
6
7
8
9
10
Status CreateList_H(LinkList L, int i) {
InitList_L(L);
for (int j = i; j > 0; --j) {
LinkList p = (LinkList) malloc(sizeof(LNode));
scanf_s("%d\n", p->data);
p->next = L->next;
L->next = p;
}
return OK;
}

11、尾插法创建链表

image-20250823105433816.png

1
2
3
4
5
6
7
8
9
10
11
12
Status CreateList_R(LinkList L, int i) {
InitList_L(L);
LinkList r = L;
for (int j = 0; j < i; ++j) {
LinkList p = (LinkList) malloc(sizeof(LNode));
scanf_s("%d\n", p->data);
p->next = NULL;
r->next = p;
r = p;
}
return OK;
}

本文作者: zhangJinLong
本文链接: https://zhang426fly.github.io/2025/08/23/data_structure/list/
版权声明: 本博客所有文章除特别声明外,均采用BY-NC-SA许可协议。转载请注明出处!


单链表
https://zhang426fly.github.io/2025/08/23/data_structure/list/
作者
zhangJinLong
发布于
2025年8月23日
许可协议