单链表-头尾插法,遍历输出,查找删除。

1. 创建结构体
2. 头插法创建单链表
3.尾插法创建单链表
4.查找并且删除链表中的数字
5.遍历显示单链表元素
6.Main测试主函数

定义结构体:
typedef struct LNode {
	int data;
	struct LNode* next;
}LNode;
头插法创建单链表:
LNode* HeadInsert() {
	LNode* head = (LNode*)malloc(sizeof(LNode));
	LNode* p;
	head->next = NULL;//头结点指针初始化
	for (int i = 0; i < 10; i++)//循环插入,这里为方便直接循环插入数据
	{
		LNode* x = (LNode*)malloc(sizeof(LNode));
		x->data = i;
		x->next = head->next;
		head->next = x;
	}
	return head;
}
尾插法创建单链表:
LNode* TailInsert() {
	LNode* head = (LNode*)malloc(sizeof(LNode));
	LNode* p;
	head->next = NULL;//头结点指针初始化
	p = head;//用p指针帮忙插入数据,head指针在头结点上当领导就可以了
	for (int i = 0; i < 10; i++)
	{
		LNode* x = (LNode*)malloc(sizeof(LNode));
		x->data = i;
		p->next = x;
		x->next = NULL;
		p = x;
	}
	return head;
}
查找并且删除链表中的数字,成功返回一,没有这个数字就返回0
int SearchAndDelete(LNode* List, int x) {
	LNode* p;
	p = List;
	while (p->next != NULL)
	{
		if (p->next->data == x)
		{
			p->next = p->next->next;
			return 1;
		}
		p = p->next;
	}
	return 0;
}
遍历显示单链表元素
void Show(LNode* lnode) {
	LNode* p;
	p = lnode;
	while (p->next != NULL)
	{
		cout << p->next->data << " ";
		p = p->next;
	}
	cout << endl;
}
Main测试主函数
int main() {
	LNode* A = HeadInsert();
	LNode* B = TailInsert();
	cout << "头插法生成的链表:";
	Show(A);
	cout << "尾插法生成的链表:";
	Show(B);
	cout << "A表删除值为6的元素后的链表:";
	Show(A);
	return 0;
} 
结果
头插法生成的链表:9 8 7 6 5 4 3 2 1
尾插法生成的链表:0 1 2 3 4 5 6 7 8 9
A表删除值为6的元素后的链表:9 8 7 6 5 4 3 2 1

      可以看到头插法生成的链表顺序是和插入顺序相反的,尾插法生成的链表顺序是和插入顺序相同。结合插入过程,头插法见名知意就是在头部插入,其他元素往队伍头上插队。尾插法往队伍尾巴上面添加自己,从而导致插入顺序与位置顺序不一致

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值