#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
typedef struct LNode { // 定义单链表结点类型
int data; // 每个结点存放一个数据元素
struct LNode *next; // 指针指向下一个结点
} LNode, *LinkedList;
// 初始化一个单链表(带头结点)
LinkedList initList(LinkedList L) {
L = (LNode *)malloc(sizeof(LNode)); // 分配一个头结点
L->data = 999;
if(L == NULL) { // 内存不足,分配失败
printf("L == NULL");
return 0;
}
L->next = NULL; // 头结点之后暂时还没有结点
return L;
}
/**
* 在第i个位置插入元素e(带头结点)
*/
bool ListInsert(LinkedList L, int i, int e){
if( i < 1) {
printf("i < 1");
return 0;
}
LNode *p; // 创建一个当前指向的结点
p = L; // 初始化指向到头结点
int j = 1;
while(j < i) {
p = p->next;
j++;
}
LNode *s; // 新建一个待插入的新节点
s = (LNode *)malloc(sizeof(LNode)); // 给新节点分配内存
s->data = e; // 给新节点放入数据
s->next = p->next; // 新节点指向当前结点的下一个结点
p->next = s; // 原结点指针改为指向到新创建的结点
}
readAll(LinkedList L) {
LNode *p;
p = L;
while(p->next != NULL) {
p = p->next;
printf("%d \n", p->data);
}
}
deleteItem(LinkedList L, int i) {
int j;
LNode *s;
s = L;
for(j = 0; j<i-1; j++) {
s = s->next;
}
LNode * t = s->next;
s->next = s->next->next;
free(t);
}
int main()
{
LinkedList L;
L = initList(L);
ListInsert(L, 1, 111);
ListInsert(L, 1, 222);
ListInsert(L, 1, 333);
readAll(L);
deleteItem(L, 2);
printf("---------------------------------------\n");
readAll(L);
return 0;
}
王道数据结构链表C语言版
最新推荐文章于 2023-10-23 18:55:05 发布