链表相关操作



一、单链表

1、头插法
在这里插入图片描述
不断从头部增加节点
代码如下

struct ListNode
{
	ListNode(int val_)
	{
		val = val_;
		next = NULL;
	}
	int val;
	ListNode* next;
};

void insertList(ListNode* root, int len)
{
	root->next = nullptr;
	for(int i = 0; i <len; i++)
	{
		ListNode* p = new ListNode;
		cin >> p->val;
		p->next = root->next; // 先将根节点的所有节点放在p节点后面
		root->next = p; //将p节点放在根节点后面
	}
}

2、尾插法

代码如下

struct ListNode
{
	ListNode(int val_)
	{
		val = val_;
		next = NULL;
	}
	int val;
	ListNode* next;
};

void insertList(ListNode* root, int len)
{
	
	ListNode* node = root;
	for(int i = 0; i <len; i++)
	{
		ListNode* p = new ListNode;
		cin >> p->val;
		node->next = p;
		node = p; 

	}
}

二、循环链表结构和定义

在这里插入图片描述
循环链表是尾部节点的next指针指向头部节点
循环链表有两种表示方法:
一种方法是头指针表示法:即头指针的next指针指向第一个节点
另一种是尾指针表示法:即尾指针的next指针指向头指针,尾指针是尾部第一个节点


三、循环链表的合并

在这里插入图片描述

步骤:
1)将链表1的头指针赋值给节点p,
2)将链表1的尾结点的next指针指向链表2的第一个节点
3)将链表2的头结点删除
4)将链表2的尾结点指向节点p

四、双向链表

在这里插入图片描述
1、结构

struct ListNode
{
	int val;
	ListNode* next;
	ListNode* prior;
};

2、双向循环链表
在这里插入图片描述
3、双向链表的插入
在这里插入图片描述
代码

struct ListNode
{
	int val;
	ListNode* next;
	ListNode* prior;
};
void insert_node(ListNode* root, int len)
{
	ListNode* L1 = root;
	for(int i = 0; i < len; i++)
	{
		L1 = L1->next;
	}
	ListNode* p = new ListNode;
	cin >> p->val;
	L1->prior->next = p;
	p->prior = L1->prior;
	p->next = L1;
	L1->prior = p;
}

4、双向链表删除
在这里插入图片描述

struct ListNode
{
	int val;
	ListNode* next;
	ListNode* prior;
};
void insert_node(ListNode* root, int len)
{
	ListNode* L1 = root;
	for(int i = 0; i < len; i++)
	{
		L1 = L1->next;
	}
	ListNode* p = L1;
	L1->prior->next = L1->next;
	L1->next->prior = L1->prior;
	delete p;

}

五、链表对比

在这里插入图片描述

六、链表和顺序表对比

顺序表比如vector这类,链表比如list这类。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值