C语言之单向链表的头插法和删除

#include<stdio.h>
#include<malloc.h>
//定义链表中每个节点的结构
typedef struct _Node {
	int data;
	struct _Node* p_Next;
}Node;
//定义链表的表头,表头用来存放链表第一个节点的地址
//链表的表头就代表了这个链表
typedef struct _List {
	Node* List_Head;
}List;
//创建一个链表,用List类型,因为表头就代表着整个链表
List* CreatList() {
	//为新的链表表头分配空间
	List* new_List = (List*)malloc(sizeof(List));
	new_List->List_Head = NULL;		//新的链表中,表头节点初始化为空
	return new_List;			
}
//创建一个节点
Node* CreatNode(int n_data) {
	//为新的节点分配空间
	Node* new_Node = (Node*)malloc(sizeof(Node));
	new_Node->data = n_data;
	new_Node->p_Next = NULL;
	return new_Node;
}
//头插法,从链表的表头开始插入
void List_Head_Insert(List* ListHead,int n_data) {
	//如果链表头为空,也代表着链表中没有节点存在
	if (ListHead->List_Head == NULL) {
		Node* First_Node = CreatNode(n_data);//创建一个节点作为链表的第一个节点
		ListHead->List_Head = First_Node;
		return;
	}
	//如果链表的表头已经存在
	Node* Insert_Node = CreatNode(n_data);
	Insert_Node->p_Next = ListHead->List_Head;
	ListHead->List_Head = Insert_Node;
}
//头部节点的删除
void Head_Node_Delete(List* ListHead) {
	//如果说表头的下一跳为空,即后方不存在节点了
	//那么可以直接删除
	if (ListHead->List_Head->p_Next == NULL) {
		free(ListHead->List_Head);
	}
	//否则就不能直接删除,要让下一跳成为新的表头
	Node* temp;
	temp = ListHead->List_Head->p_Next;
	free(ListHead->List_Head);
	ListHead->List_Head = temp;
}
//打印链表
void Print_List(Node* p_Move) {
	while (p_Move) {
		printf("%d\n",p_Move->data );
		p_Move = p_Move->p_Next;
	}
	printf("\n");
}

int main() {
	List* list1 = CreatList();
	List_Head_Insert(list1, 111);
	List_Head_Insert(list1, 222);
	List_Head_Insert(list1, 333);
	List_Head_Insert(list1, 444);
	List_Head_Insert(list1, 555);
	List_Head_Insert(list1, 666);

	Print_List(list1->List_Head);
	Head_Node_Delete(list1);
	Print_List(list1->List_Head);
	
	return 0;
}```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值