首页 > 其他分享 >[代码随想录] 第四天

[代码随想录] 第四天

时间:2024-01-13 15:23:40浏览次数:26  
标签:head ListNode val int 代码 随想录 next 第四天 null

19.删除链表的倒数第N个节点https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
思路:使用前后指针,当删除倒数第N个节点时,快慢指针之间应该间隔N个元素,当快指针到达链尾时,慢指针next指向所要删除节点。
时间复杂度:O(N)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        int i =0;
        ListNode fakeHead = new ListNode();
        fakeHead.next = head;
        ListNode p = fakeHead;
        ListNode q = fakeHead;
        if(head.next==null){
            return null;
        }
        while(p!=null){
            i++;
            p=p.next;
            if(i>n+1){
                q=q.next;
            }
        }
        q.next=q.next.next;
    return fakeHead.next;
    } 
}

------------------------分割线-------------------------
24. 两两交换链表中的节点https://leetcode.cn/problems/swap-nodes-in-pairs/submissions/495209174/
思路:①自行创建头节点②循环判断条件应为p.next!=null && p.next.next!=null,这样奇数偶数都可以完成节点交换。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        if (head == null) {
            return null;
        }
        ListNode fakeHead = new ListNode();
        fakeHead.next = head;
        ListNode begin = fakeHead;
        ListNode p = fakeHead;
        ListNode q;
        while (p.next != null && p.next.next != null) {
            q = p.next.next;
            p.next.next=q.next;
            q.next = p.next;
            p.next = q;
            p=p.next.next;
        }
        
        return fakeHead.next;
    }
}

------------------------分割线-------------------------
160.链表相交https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/description/
思路:先求出两链表长度,两链表如有相交节点,一定位于短链表部分,因此长链表较长部分不做研究,从短链表头节点相应位置开始循环判断节点是否相同。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode(int x) {
 * val = x;
 * next = null;
 * }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int length_a = 0;
        int length_b = 0;
        ListNode p = headA;
        while (p != null) {
            length_a++;
            p = p.next;
        }
        p = headB;
        while (p != null) {
            length_b++;
            p = p.next;
        }
        p = headA;
        ListNode q = headB;
        int subValue = length_a - length_b;
         if (subValue >= 0) {
            p = headA;
            int i = 0;
            while (i < subValue) {
                i++;
                p = p.next;
            }

        } else {
            subValue = -subValue;
            int i = 0;
            while (i < subValue) {
                i++;
                q = q.next;
            }
        }
        while (p != null) {
            if (p == q) {
                return p;
            }
            p = p.next;
            q = q.next;
        }
        return null;

    }
}

-----------------------分割线-------------------------
142.环形链表IIhttps://leetcode.cn/problems/linked-list-cycle-ii/description/
思路:

/**
 * Definition for singly-linked list.
 * class ListNode {
 * int val;
 * ListNode next;
 * ListNode(int x) {
 * val = x;
 * next = null;
 * }
 * }
 */
public class Solution {
    public ListNode detectCycle(ListNode head) {
        if (head == null) {
            return null;
        }
        ListNode fast = head;
        ListNode slow = head;
        while (fast.next != null && fast.next.next != null) {
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) {
                ListNode index1 = head;
                ListNode index2 = slow;
                while (index1 != index2) {
                    index1 = index1.next;
                    index2 = index2.next;
                }
                return index1;
            }
        }
        return null;
    }
}

标签:head,ListNode,val,int,代码,随想录,next,第四天,null
From: https://www.cnblogs.com/cssg/p/17962386

相关文章

  • Android 14 新特性代码 UUID.fromString & Matcher.matches 的细节改动(扒源码)
    文章目录前言UUID处理的更改正则表达式的更改结束前言Android14已经出来好久好久了…今天其他的暂且不论,单纯的讲一下OpenJDK17更新的两点变更(扒源代码)~对正则表达式的更改UUID处理首先,正则表达式的更改:现在,为了更严格地遵循OpenJDK的语义,不允许无效的组引用。您可能会......
  • 构建高效外卖配送系统:技术要点与示例代码
    随着外卖服务的普及,构建一个高效的外卖配送系统成为餐饮业务成功的关键。在这篇文章中,我们将探讨外卖配送系统的关键技术要点,并提供一些示例代码,演示其中的一些实现方法。1.订单处理与管理在外卖配送系统中,订单处理是一个核心环节。以下是一个简化的订单类的示例代码,用Python语言......
  • 【SVN】代码仓库增加配置.svnignore 文件,忽略不上传同步的文件夹
    1.编辑.svnignore文件新建.svnignore文件,将需要忽略的文件夹名称放入,比如下面例子datasetsdatasets_classdatadatasshujuweightsweightdatasetx64buildx86outputoutputsinference_outputs*.build*.distdistActiondemologslog__pycache__*.pt*.onnx*.e......
  • 如何在SAP GUI中快速执行新的事务代码
    当我们成功登录SAP的某个连接后,在SAPGUI起始页(SAP轻松访问),我们可以通过点击【收藏夹】或者在界面左上角的输入框输入对应的事务代码,直接进入对应事务的界面。但是下面列举的场景,你是否知道如何快速应对? 场景一:当前已处于某个事务代码中,如何进入新的事务代码?场景二:当前SA......
  • 文件包含漏洞(一)代码解读
    文件包含漏洞简介文件包含漏洞是一种常见的Web应用程序漏洞,它允许gj者通过将恶意代码注入到应用程序中的文件包含函数中来执行任意代码。gj者可以利用此漏洞来窃取敏感信息、获取系统权限或在服务器上执行任意代码。常见的文件包含函数包括PHP中的include()和require()函数。gj者可......
  • 一行代码解决Three.js中只能在一侧看到物体的问题
    项目场景:  因为该项目比较复杂庞大,在此就简单介绍一下:  通过Three.js创建若干个物体进行了组装,从而形成了一个类似眼球模拟模型的项目,用户可以通过拖动鼠标来达到控制视角(摄像机)的目的,以此来观察整个眼球状态。Image1Three.js眼球模型  注:下面所说的正视为从红线正轴......
  • 矩阵乘法代码
    voidMatrixChain(intp[],intn,int**m,int**s){for(inti=1;i<=n;i++)m[i][i]=0;//初始化for(intr=2;r<=n;r++){for(inti=1;i<=n-r+1;i++){intj=i+r-1;m[i][j......
  • Dating Java8系列之通过行为参数化传递代码
    给我馍馍/文 引言 作为技术开发人员,我们无法保证我们写出来的代码的可用时间和保质期,也许今天刚上线的一个功能,等到明天就因为需求变动不得不进行更改。 为什么会不断的变化作为技术人员,我们当然希望需求能循序渐进地平稳过度,但往往事与愿违,对于其原因我简单总结为以......
  • 代码随想录 day17 平衡二叉树 二叉树的所有路径 左叶子之和
    平衡二叉树之前一直写迭代代码没有怎么写递归正好这题不是很好写迭代练习一下递归这题递归逻辑相对简单左右子树高度差判断是不是大于一可以直接返回结果不大于一就高度max(l,r)+1二叉树的所有路径关键要点这题适合先序遍历回溯过程和递归过程是一起写的进来几次......
  • 代码优化
    1.搭建minio2.修改后端文件上传接口  在用户添加service中将avatar的值设置为修改上传接口 3.修改不能修改用户名 在添加用户的index.vue中添加账户绑定disable默认值为false,用来控制修改的不能修改用户名   4.上传文件优化把img的地址改为form.avatar......