网站如何看是哪家公司做的网站成品作业
2026/3/26 20:34:24 网站建设 项目流程
网站如何看是哪家公司做的,网站成品作业,wordpress如何播放m3u8的视频,品牌策划书案例场景想象#xff1a; 你是一列火车的检票员#xff0c;你的任务是把所有“没买票的乘客”#xff08;值为 val 的节点#xff09;踢下车。 如果是中间的车厢没票#xff1a;很简单#xff0c;让前一节车厢直接连到后一节车厢#xff0c;把中间那节甩掉就行。 如果是**第…场景想象你是一列火车的检票员你的任务是把所有“没买票的乘客”值为val的节点踢下车。如果是中间的车厢没票很简单让前一节车厢直接连到后一节车厢把中间那节甩掉就行。如果是**第一节车厢火车头**没票这就麻烦了。因为火车头前面没有车厢了你没法进行“跳过”操作。你需要特殊处理换个新车头。痛点为了处理“头结点可能被删除”的情况我们通常要写两套逻辑一套处理头结点一套处理中间节点。这很麻烦而且容易写错。解决方案虚拟头结点 (Dummy Head)我们在原来的火车头前面硬加一节**“假车厢”**。 这样一来原来的火车头就变成了“第二节车厢”。所有节点包括原来的头结点都有了“前驱节点”。 我们就不用特殊分类讨论了一套逻辑通杀所有情况力扣 203. 移除链表元素https://leetcode.cn/problems/remove-linked-list-elements/题目分析输入链表的头节点head一个整数val。目标删除链表中所有满足Node.val val的节点。输出新的头节点。例子head [1, 2, 6, 3, 4, 5, 6], val 6移除所有的 6。结果[1, 2, 3, 4, 5]。核心思维虚拟头结点 遍历删除创建 Dummylet dummy new ListNode(0, head);dummy.next指向原来的head。遍历指针cur让cur指向dummy站在假车厢上。判断与删除看cur.next下一节车厢的值。如果是目标值cur.next cur.next.next;跳过它注意此时 cur 不要动因为新接上来的车厢可能还是目标值要继续检查。如果不是目标值cur cur.next;安全cur 往前走一步。返回结果返回dummy.next因为dummy是假的后面挂着的才是真的新链表。代码实现 (JavaScript)JavaScript/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val (valundefined ? 0 : val) * this.next (nextundefined ? null : next) * } */ /** * param {ListNode} head * param {number} val * return {ListNode} */ var removeElements function(head, val) { // 1. 创建虚拟头结点 // 它的值是多少不重要0或者-1都行关键是它的 next 要指向 head const dummy new ListNode(0, head); // 2. 指针 cur 指向虚拟头结点 // 我们要通过 cur 去操作 cur.next let cur dummy; // 3. 遍历链表 // 只要后面还有节点就继续检查 while (cur.next ! null) { if (cur.next.val val) { // 发现目标执行删除操作 // 让 cur 的 next 指针跳过目标节点直接连到下下个 cur.next cur.next.next; // 重点细节删除后cur 不要往前走 // 因为新接上来的 cur.next 可能还是等于 val 的下一轮循环要继续检查它 } else { // 不是目标cur 安全前进一步 cur cur.next; } } // 4. 返回真正的头结点 return dummy.next; };深度对比如果没有 Dummy Head 会怎样如果不加虚拟头结点代码会变成这样JavaScript// 【不推荐】没有 Dummy Head 的写法 var removeElements function(head, val) { // 1. 先处理头结点连续是 val 的情况 // 比如 [6, 6, 6, 1], val6。要把开头的 6 全删掉head 才会变到 1 while (head ! null head.val val) { head head.next; } // 2. 再处理非头结点 let cur head; while (cur ! null cur.next ! null) { if (cur.next.val val) { cur.next cur.next.next; } else { cur cur.next; } } return head; };你看你需要额外写一个while循环专门去“清洗”头结点。 万一链表全是 6[6, 6, 6]删完变空了你还得小心空指针报错。 用 Dummy Head 就可以把这两段逻辑统一既优雅又不容易出错。总结这道题是链表的**“第一课”**。 请记住这个套路凡是涉及“头结点可能会变”的操作如删除、插入、翻转无脑使用 Dummy Head绝对没错。下一题预告反转链表如果说这道题是热身下一题LC 206. 反转链表就是真正的实战。题目1 - 2 - 3 - 4 - 5变成5 - 4 - 3 - 2 - 1这是一个需要你闭着眼睛都能写出来的算法。它是“K个一组翻转”、“回文链表”等所有高阶题目的基石。准备好去扭转指针的方向了吗

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询