首页 > 编程语言 >代码随想录算法训练营第第二天 | 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节、面试题 02.07. 链表相交、142.环形链表II

代码随想录算法训练营第第二天 | 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节、面试题 02.07. 链表相交、142.环形链表II

时间:2024-05-12 14:41:49浏览次数:15  
标签:面试题 ListNode val 随想录 fast next 链表 let

  1. 两两交换链表中的节点

用虚拟头结点,这样会方便很多。
本题链表操作就比较复杂了,建议大家先看视频,视频里我讲解了注意事项,为什么需要temp保存临时节点。
题目链接/文章讲解/视频讲解: https://programmercarl.com/0024.两两交换链表中的节点.html

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 *交换节点比较容易混乱,按步骤来
 */
var swapPairs = function(head) {
    let ret = new ListNode(null,head);
    let temp = ret;
    while(temp.next&&temp.next.next){
        let cur = temp.next.next;
        let prev = temp.next;
        prev.next = cur.next;
        cur.next = prev;
        temp.next = cur;
        temp = prev;
    }
    return ret.next;
};

19.删除链表的倒数第N个节点

双指针的操作,要注意,删除第N个节点,那么我们当前遍历的指针一定要指向 第N个节点的前一个节点,建议先看视频。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0019.删除链表的倒数第N个节点.html

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * 关键在于怎么找到第n个节点的前一个节点
 * @return {ListNode}
 */
var removeNthFromEnd = function(head, n) {
    let dummy = new ListNode(null, head);
    let fast = dummy;
    let slow = dummy;
    let count = 0;
    while(count<=n){
        fast = fast.next;
        count++;
    }
    while(fast){
        slow = slow.next;
        fast = fast.next;
    }
    slow.next = slow.next.next;
    head = dummy.next;
    return head;
};

面试题 02.07. 链表相交

本题没有视频讲解,大家注意 数值相同,不代表指针相同。
题目链接/文章讲解:https://programmercarl.com/面试题02.07.链表相交.html

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} headA
 * @param {ListNode} headB
 * @return {ListNode}
 * 完全没想到方法,适合二刷
 */
var getIntersectionNode = function(headA, headB) {
    let countA = 0;
    let countB = 0;
    let curA = headA;
    let curB = headB;
    while(curA){
        countA++;
        curA = curA.next;
    }
    while(curB){
        countB++;
        curB = curB.next;
    }
    let curA2 = headA;
    let curB2 = headB;
    if(countA<countB){
        [curA2,curB2] = [curB2,curA2];
        [countA,countB] = [countB,countA];
    }
    let i = countA - countB;
    while(i--){
        curA2 = curA2.next;
    }
    while(curA2 && curA2!==curB2){
        curA2 = curA2.next;
        curB2 = curB2.next;
    }
    return curA2;
    
};

142.环形链表II

算是链表比较有难度的题目,需要多花点时间理解 确定环和找环入口,建议先看视频。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0142.环形链表II.html

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} head
 * @return {ListNode}
 *快慢指针结合数学题,
 *另一种方法,用哈希保存访问过的节点,如果遍历时再次遍历到访问过的节点,则是入口。
 */
var detectCycle = function(head) {
    if(!head || !head.next) return null;
    let slow = head.next;
    let fast = head.next.next;
    while(fast&&fast.next&&fast!==slow){
        fast = fast.next.next;
        slow = slow.next;
    }
    if(!fast || !fast.next) return null;
    slow = head;
    while(slow!==fast){
        slow = slow.next;
        fast = fast.next;
    }
    return fast;
};

标签:面试题,ListNode,val,随想录,fast,next,链表,let
From: https://www.cnblogs.com/yuanyf6/p/18187806

相关文章

  • Java面试题:线程池内“闹情绪”的线程,怎么办?
    在Java中,线程池中工作线程出现异常的时候,默认会把异常往外抛,同时这个工作线程会因为异常而销毁,我们需要自己去处理对应的异常,异常处理的方法有几种:在传递的任务中去处理异常,对于每个提交到线程池中的执行的任务,可以提前通过异常进行捕获,这样即便出现了异常,也不会影响线程池中的......
  • 稀疏矩阵 - 十字链表 & 快速转置
    十字链表每个稀疏矩阵非零元素都是一个结点,数据域存储的是所在行、所在列和元素值,有两个指针域,分别存储的是指向与该元素同行的下一个非零元素和同列的下一个非零元素的指针。所以一个m行n列的稀疏矩阵,(最多)总共有(m+n)个链表,即(在每行每列都有非零元素的情况下,当然这样可能并不算......
  • 2024-05-11 react-native 相关面试题
     ReactNative是什么?ReactNative是Facebook开源的一个使用JavaScript和React编写原生应用的框架。它允许开发者使用JavaScript和React编写跨平台的移动应用,这些应用可以运行在iOS和Android平台上。ReactNative有哪些优点?跨平台:一套代码可以开发出跨平台的app,减少了人......
  • 代码随想录训练营第三天 | 203.移处链表元素 707.设计链表 206.反转链表
    203.移除链表元素题目链接https://leetcode.cn/problems/remove-linked-list-elements/文章讲解https://programmercarl.com/0203.移除链表元素.html#算法公开课视频讲解https://www.bilibili.com/video/BV18B4y1s7R9/?vd_source=2b5b33d3d692b0064daff4e58957fc82tips:对......
  • Hive中sql语句是如何转换成MapReduce的(面试题)
    Hive中的sql语句是如何转化成MR任务的(面试)元数据存储在数据库中,默认存在自己自带的derby数据库中(derby在Hive启用的时候会占用元数据库,且数据不会共享给客户端,所以1一次只能有一个客户端使用,开了另一个客户端就会连接不上)1)、解析器(SQLParser):将SQL字符串转换成抽象语法树AST(3.......
  • Java面试题:Spring Bean线程安全?别担心,只要你不写并发代码就好了!
    Spring中的Bean是否线程安全取决于Bean的作用域(scope)。Spring提供了几种不同的Scope,其中包括Singleton、Prototype、Request、Session、GlobalSession等。 SingletonScope(单例模式)默认情况下,SpringBean是SingletonScope,这意味着在整个应用程序上下文中只有一个实例。......
  • 手撕链表(自存)
    #include<stdio.h>#include<stdlib.h>typedefintE;typedefstructnode{Eval;structnode*next;}ListNode;ListNode*list_creat(){ListNode*list=malloc(sizeof(ListNode));returnlist;}voidpush_back(ListNode*List......
  • 代码随想录训练营第二天 | 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II
    977.有序数组的平方题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/文章讲解:https://programmercarl.com/0977.有序数组的平方.html视频讲解:https://www.bilibili.com/video/BV1QB4y1D7ep暴力解时间复杂度O(nlogn)空间复杂度O(1)双指针法时间复......
  • DDD面试题:DDD聚合和表的对应关系是什么 ?(来自蚂蚁面试)
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • Java面试题:@PostConstruct、init-method和afterPropertiesSet执行顺序?
    在Spring框架中,@PostConstruct注解、init-method属性、以及afterPropertiesSet()方法通常用于初始化Bean的逻辑。它们都提供了在Bean创建和初始化完成后执行的方法,但执行顺序有所不同。想要知道@PostConstruct、init-method、afterPropertiesSet()的执行顺序,只要搞明白它们各自在......