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+双向链表法