代码随想录算法训练营第三天| 203. 移除链表元素 707.设计链表 206.反转链表
1.代码随想录算法训练营第二天| 977.有序数组的平方、 209.长度最小的子数组、 59.螺旋矩阵II
2.代码随想录算法训练营第三天| 203. 移除链表元素 707.设计链表 206.反转链表
3.代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142. 环形链表 II4.代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。5.代码随想录算法训练营第六天| 242. 有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和6.代码随想录算法训练营第七天| 454. 四数相加 II 383. 赎金信 15. 三数之和 18. 四数之和7.代码随想录算法训练营第九天| 28. 实现 strStr() 和讲讲KMP8.代码随想录算法训练营第十天| 232. 用栈实现队列 225. 用队列实现栈9.代码随想录算法训练营第十一天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值10.代码随想录算法训练营第十三天| 239. 滑动窗口最大值 347. 前 K 个高频元素11.代码随想录算法训练营第十四天| 二叉树相关递归遍历以及迭代遍历12.代码随想录算法训练营第十五天| 226. 翻转二叉树 101. 对称二叉树13.代码随想录算法训练营第十六天| 104. 二叉树的最大深度 111. 二叉树的最小深度 222. 完全二叉树的节点个数14.代码随想录算法训练营第十七天| 110. 平衡二叉树 257. 二叉树的所有路径 404. 左叶子之和15.代码随想录算法训练营第十八天| 513. 找树左下角的值 112. 路径总和 113. 路径总和 II 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树16.代码随想录算法训练营第二十一天,二十二,二十三| 530. 二叉搜索树的最小绝对差 501. 二叉搜索树中的众数 236. 二叉树的最近公共祖先 235. 二叉搜索树的最近公共祖先 701. 二叉搜索树中的插入操作 450. 删除二叉搜索树中的节点17.代码随想录算法训练营第二十四天 二十五 | 回溯的理论基础,77. 组合 216. 组合总和 III 17. 电话号码的字母组合18.代码随想录 | 图论 797. 所有可能的路径(dfs) ,200. 岛屿数量 (dfs)200. 岛屿数量 (bfs) ,并查集,1971. 寻找图中是否存在路径203. 移除链表元素
https://leetcode.cn/problems/remove-linked-list-elements/description/
public ListNode removeElements(ListNode head, int val) {
if (head == null) return head;
ListNode wHead = new ListNode(Integer.MAX_VALUE,head);
ListNode p = head;
ListNode pre = wHead;
while (p != null){
if (p.val == val){
pre.next = p.next;
p = pre.next;
}else {
pre = pre.next;
p = p.next;
}
}
return wHead.next;
}
总结:这破题,出的就有问题,这就是不带头结点的链表,非得说是带头节点的,哪有带头节点的链表头结点还有值的啊,破题浪费我半个多小时
707.设计链表
https://leetcode.cn/problems/design-linked-list/description/
class MyLinkedList {
int size;
ListNode head;
public MyLinkedList(){
size = 0;
head = new ListNode(Integer.MAX_VALUE);
}
public int get(int index){
if (index < 0 || index >= size){
return -1;
}
ListNode p = head;
for (int i = 0; i <= index; i++) {
p = p.next;
}
return p.val;
}
public void addAtHead(int val){
addAtIndex(0,val);
}
public void addAtTail(int val){
addAtIndex(size,val);
}
public void addAtIndex(int index,int val){
if (index > size || index < 0) return;
ListNode p = head;
for (int i = 0; i < index; i++) {
p = p.next;
}
if (index == size){
ListNode newNode = new ListNode(val);
p.next = newNode;
size++;
}else {
ListNode newNode = new ListNode(val,p.next);
p.next = newNode;
size++;
}
}
public void deleteAtIndex(int index){
if (index < 0 || index >= size) return;
ListNode p = head;
for (int i = 0; i < index; i++) {
p = p.next;
}
p.next = p.next.next;
size--;
}
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
}
总结:细致一点就好了,不要急
206.反转链表
https://leetcode.cn/problems/reverse-linked-list/description/
//头插法
public static ListNode reverseList(ListNode head) {
ListNode newHead = new ListNode();
while (head != null){
ListNode l = head.next;
head.next = newHead.next;
newHead.next = head;
head = l;
}
return newHead.next;
}
//三指针法
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode p = head;
ListNode temp = null;
while (p != null){
temp = p.next;
p.next = pre;
pre = p;
p = temp;
}
return pre;
}
总结:注意辨析题目到底是不是个有头结点的链表,很烦,两种方法,头插法,三指针(逻辑上通过改变指针走向去实现翻转)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?