链表相关
链表逆转
双指针
pre指针指向上一个节点,cur指向当前节点,用temp指向cur的下一个节点cur的next指向pre- 让
pre指向cur,再cur指向temp cur为空退出循环
void reverseLinkedList(listNode *head){
listNode *pre=nullptr;
listNode *cur=head->next;
listNode *tmep=nullptr;
while(cur){
temp=cur->next;
cur->next=pre;
pre=cur;
cur=temp;
}
head->next=pre;
}
快慢指针
要找到链表中倒数第k个节点
fast指针指向链表中第k+1个节点,slow指向链表中第1个节点- 让
fast和slow同时往下遍历 fast为空退出循环,此时slow为倒数第k个节点
listNode find(listNode *head){
listNode *fast=head->next;
listNode *slow=head->next;
for(int i=0;i<k;i++){
fast=fast->next;
if(!fast){
cout<<"error"<<endl;
return nullptr;
}
}
while(fast){
fast=fast->next;
slow=slow->next;
}
return slow;
}
静态链表
用数组存储,指针域存下一个节点的下标,下标0表示空
结构
struct listNode{
DataType data; //数据域
int next; //指针域
};
struct staticList{
int capacity; //数组长度-1
int size; //表中节点个数
listNode *nodes;
int first; //第一个节点的下标
}
跳表
有序链表实现二分查找
- 一个跳表有(logN)层链表,上一层链表节点数是下一层节点数的1/2
- 最底层的是原始链表,包含所有数据
- 每层链表都是有序的
- 上层的节点的其中一个指针域指向下层相同值的节点
head->next指向最上层第一个节点

浙公网安备 33010602011771号