算法学习笔记-【链表篇】

 

1. 单链表反转

https://blog.csdn.net/qq_26697709/article/details/79379726?spm=1001.2014.3001.5501
尾插法
头插法
指针反转

2. 链表中环的检测


快慢指针
哈希表记录位置

3. 两个有序的链表合并


是否破坏之前链表的结构
不破坏的分两步:
1)两个指针记录两个链表的位置,一个新链表的指针指向对比后小的结点,依次往后平移
2)将新链表指针指向没遍历完的链表


Node* Merge(Node* head1, Node* head2)  //合并两个有序链表成一个有序链表
{
	if(head1 == NULL)
		return head2;
	if(head2 == NULL)
		return head1;
	Node *head, *p1, *p2;
	if(head1->data < head2->data)   //确定好合并后的头结点
	{
		head = head1;
		p1 = head1->next;
		p2 = head2;
	}
	else
	{
		head = head2;
		p1 = head1;
		p2 = head2->next;
	}	
	Node *move = head;   //定义一个移动指针,将两个链表连接在一起
	while(p1 && p2)
	{
		if(p1->data <= p2->data)
		{
			move->next = p1;
			move = p1;
			p1 = p1->next;
		}
		else if(p1->data > p2->data)
		{
			move->next = p2;
			move = p2;
			p2 = p2->next;
		}
	}
	if(p1)
		move->next = p1;     // 补齐p1剩余未比较的节点
	if(p2)
		move->next = p2;     // 补齐p2剩余未比较的节点
	return head;
}
————————————————
版权声明:本文为CSDN博主「leikun153」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leikun153/article/details/81412782

4. 删除链表倒数第n个结点


三指针法:链表个数、倒数第n个结点,n-1个结点


5. 求链表中间结点


快慢指针

6. LRU缓存淘汰算法


时间复杂度O(n)降低为O(1)

方法:hash+双向链表法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值