王道数据结构链表C语言版

#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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值