
链表
数据结构---链表
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
剑指 offer acwing 36 合并两个排序的链表
题面题解本题考查两路归并,我们可以用两个指针,新开一个虚拟节点,通过比较两个链表值的大小来移动指针,最后肯定有一个链表的指针到最后,然后将剩下一个链表的值复制即可代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class S原创 2021-03-20 20:56:04 · 131 阅读 · 0 评论 -
剑指 offer acwing 35. 反转链表
题面题解我们可以新定义一个指针,用于指向单链表的前一个节点,初始化为空,每次遍历时,我们让当前节点的next指向pre(上一个节点),然后pre变成cur(当前节点),cur变成下一个节点(因为next会覆盖,所以要提前储存),最后cur为空,pre就是最后一个节点代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListN原创 2021-03-20 20:28:50 · 135 阅读 · 0 评论 -
剑指 offer acwing 29 删除链表中重复的节点
题面题解对于可能删除头节点的链表,我们一般先定义一个虚拟的头节点来处理边界问题然后从前往后扫描整个链表,每次扫描元素相同的一段,如果这段中的元素个数多于1个,则将整段元素直接删除。 O(n)代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL)原创 2021-03-18 19:41:08 · 133 阅读 · 0 评论 -
剑指 offer acwing 28 在O(1)时间删除链表结点
题面题解由于是单链表,我们不能找到其前驱节点,然后将前驱节点的指针指向当前节点的next 指针, 但是,我们可以将当前节点的下一个节点的值复制给当前节点,(然后删除下一个节点),覆盖了当前节点,就相当于删除,O(1)代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next原创 2021-03-18 19:08:13 · 121 阅读 · 0 评论 -
算法竞赛进阶指南---0x13(链表与邻接表) 邻值查找
题面题解先考虑暴力做法,两重循环找与当前数差值最小的数,O(n2)超时,接下来考虑如何优化我们可以将这个序列从小到大排序,那么对于差值最小的肯定这这个数左右两边取一个最小差值,那么如何找到一个序列的前驱和后继,就想到了双链表,它可以在 O(1) 下查找,那么问题就解了,因为排序是O(nlogn) 而其他操作都是 O(1)这里要注意,因为对于每个数只能和它前面的数比较,所以我们从最后开始遍历,对于n,找到左右两边与它差值较小的,然后删除n,找 n-1 的差值最小,从后往前遍历,这样就符合题目要求原创 2021-02-09 21:54:15 · 449 阅读 · 0 评论 -
acwing 827 双链表
题面题解(数组模拟双链表)代码#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using namespace std;const int N = 1e5 + 10;int e[N], l[N], r[N], idx;//初始化void init() { //0表示左端点,1表示右端点原创 2021-02-09 17:15:50 · 137 阅读 · 0 评论 -
acwing 826 单链表
题面题解代码#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using namespace std;const int N = 1e5 + 10;int head; //链表的头节点int e[N];//存储节点中的值int ne[N]; //存储节点的next指针int idx; /原创 2021-02-09 12:08:19 · 106 阅读 · 0 评论