单链表的相关操作及代码

1.创建结点
2.在链表末尾插入结点
3.删除接点
4.查找某个结点
5.头插法
6.尾插法
7.链表的长度
8.遍历结点


#include <stdlib.h>
#include <stdio.h>
typedef struct _Node
{
	char value;
	struct _Node * next;
} Node, *PNode;
PNode header = NULL;
PNode create_node(char value)
{
	PNode node = (PNode)(malloc(sizeof(Node)));
	node->value = value;
	node->next = NULL;
	return node;
}
void push(PNode node)//在链表最后插入节点(投放结点)
{
	PNode cur_node = header;
	if (!header)//当header为空
	{
		header = node;
		return;
	}
	while (cur_node->next)//当header不为空,找到最后一个
	{
		cur_node = cur_node->next;
	}
	cur_node->next = node; //找到and 插入
}
void remove(char value)//删除结点
{
	PNode pre_node = NULL;
	PNode cur_node = header;
	while (cur_node)//循环找到要删除的元素
	{
		if (cur_node->value == value)//找到
		{
			break;
		}
		pre_node = cur_node;
		cur_node = cur_node->next;
	}
	if (!cur_node)//排除找不到的情况
	{
		return;
	}
	if (!pre_node)//要删除的结点在第一个元素
	{
		header = cur_node->next;
		free(cur_node);
	}
	else//要删除的结点在中间或者后面
	{
		pre_node->next = cur_node->next;
		free(cur_node);
	}
}
PNode find(char value)//找到某个结点
{
	PNode cur_node = header;
	while (cur_node)//逐个向后查找
	{
		if (cur_node->value == value)//找到
		{
			return cur_node;
		}
		cur_node = cur_node->next;
	}
	return NULL;
}
void insert(char value, PNode node)//将结点插入到找到的结点前面
{
	PNode cur_node = header;
	PNode pre_node = NULL;
	while (cur_node)//向后查找要插入的结点
	{
		if (cur_node->value == value)//找到
		{
			break;
		}
		pre_node = cur_node;
		cur_node = cur_node->next;
	}
	if (!cur_node)//没找到 返回
	{
		return;
	}
	if (!pre_node)//@1 第一个节点
	{
		header = node;
		node->next = cur_node;
	}
	else//@2 中间结点
	{
		pre_node->next = node;
		node->next = cur_node;
	}
}
 void insert_head(char value, PNode node)//将结点插入到找到的结点后面
 {
 	PNode cur_node = header;
 	PNode pre_node = NULL;
 	while (cur_node)//向后查找要插入的结点
 	{
 		if (cur_node->value == value)//找到
 		{
 			break;
 		}
 		pre_node = cur_node;
 		cur_node = cur_node->next;
 	}
 	if (!cur_node)//没找到 返回
 	{
 		return;
 	}
 	if (!pre_node)//@1 第一个节点
 	{
 		header = node;
 		node->next = cur_node;
 	}
 	else//@2 中间结点
 	{
		node->next = cur_node->next;
		cur_node->next = node;
 	}
 
 }
 //链表长度
 int length(PNode node)
 {
	 int len = 0;
	 PNode cur_node = header;
	 while (cur_node)
	 {
		 cur_node = cur_node->next;
		 len++;
	 }
	 return len;
 }

void traversal(void)//遍历结点
{
	PNode node = header;
	while (node)
	{
		printf("Value: %c\n", node->value);
		node = node->next;
	}
}
int main(int ac, char * av[])
{
	
	PNode node=create_node('a');
	push(node);
	node=create_node('v');
	push(node);
	node = create_node('f');
	push(node);
	node = create_node('r');
	push(node);
	node = create_node('t');
	push(node);
	traversal();
	//remove('f');
	node = create_node('m');
	//insert('r', node);
	//insert_head('r', node);
	//traversal();
	int len = length(node);
	printf("%i\n", len);
	return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值