首页 > 其他分享 >LeeCode打卡第十七天

LeeCode打卡第十七天

时间:2024-09-04 11:55:22浏览次数:10  
标签:null ListNode val int next 链表 LeeCode 打卡 第十七

LeeCode打卡第十七天

第一题:合并两个有序链表(LeeCode第21题):

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。


主要思想:将两个链表从头开始比较,将两个链表中的较小值存入新链表中,比较到最后,有一个链表会先为空,此时需要一个判断函数,找到不为空的链表,将剩下的元素存入。

/**
 * 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 boolean isPalindrome(ListNode head) {
        List<Integer> list = new ArrayList<>();
        ListNode p = head;
        int n = 0;
        while(p != null){
            list.add(p.val);
            p = p.next;
        }
        
        int start = 0;
        int end = list.size() - 1;
        for(; start < end;){
            if(list.get(start++) != (list.get(end--))) return false;
        }        
        return true;
    }
}

第二题:两数相加(LeeCode第2题):

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。


主要思想:最核心的点在新节点的创建与进位符的保存上/p>

/**
 * 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 addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummyhead = new ListNode(-1);
        ListNode cur = dummyhead;
        ListNode p = l1, q = l2;
        int flag = 0;
        while(p != null || q != null){
            int x = (p != null) ? p.val : 0;
            int y = (q != null) ? q.val : 0;
            int sum = flag + x + y;
            flag = sum / 10;
            cur.next = new ListNode(sum % 10);
            cur = cur.next;
            if(p != null) p = p.next;
            if(q != null) q = q.next;
        }
        if(flag > 0){
            cur.next = new ListNode(1);
        }
        return dummyhead.next;
    }
}

第三题:删除链表的倒数第N个结点(LeeCode第19题):

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。


主要思想:用到了双指针,因为要删除倒数第n个节点,首先需要找到倒数第n+1个节点的位置,用cur .next = cur.next.next的操作即可删除。让一个指针比第二个指针先走n+1步,这样当一个指针遍历到链表最后的时候,另一个指针刚好在倒数第n+个元素那里。

/**
 * 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) {

        ListNode slow = head, fast = head;
        while(fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
            if(fast == slow) {
                ListNode p = head;
                ListNode q = slow;
                while(p != q){
                    p = p.next;
                    q = q.next;
                }
                 return p;
            }
        }
        return null;
    }
}

标签:null,ListNode,val,int,next,链表,LeeCode,打卡,第十七
From: https://blog.csdn.net/qq_48527330/article/details/141856938

相关文章

  • LeeCode打卡第十八天
    LeeCode打卡第十八天第一题:两两交换链表中的节点(LeeCode第24题):给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。主要思想:将两个链表从头开始比较,将两个链表中的较小值存入新链表中,比较......
  • 打卡信奥刷题(696)用Scratch图形化工具信奥B3922[普及组/提高] [GESP202312 一级] 小杨
    [GESP202312一级]小杨报数题目描述小杨需要从111到NNN报数......
  • Datawhale X 李宏毅苹果书AI夏令营 Task3打卡
    3.7批量归一化批量归一化的核心思想在于把误差函数图像的“山铲平”,在某些误差表面上不同参数方向的变化率可能差别很大,此时在损失函数上找到临界点会比较困难比如对一个简单的线性函数\(y=\sigma(w_1\timesx_1+w_2\timesx_2+b)\)来说,我们考虑对于参数\(w_1,w_2\)来说,......
  • LeeCode打卡第十六天(补充题)
    补充一题:环形链表II(LeeCode第142题):给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到......
  • 打卡信奥刷题(676)用Scratch图形化工具信奥B3867[普及组/提高组] [GESP202309 三级] 小
    [GESP202309三级]小杨的储蓄题目描述小杨共有NNN个储蓄罐,编号从00......
  • Datawhale X 李宏毅苹果书AI夏令营 Task2打卡
    3.3自适应学习率当梯度大小不再下降时,并不代表梯度本身已经变得很小接近于0了,有可能是梯度在波谷之间来回震荡。原始的梯度下降在很简单的误差表面上都不一定能够达到临界点,因此引入自适应学习率。3.3.1AdaGrad传统的梯度下降更新参数\(\theta_t^i\)的过程是\[\theta_{t+......
  • Task2打卡了解线性模型
    在本节提到线性模,我第一反应是我学过的线性代数。曾经学过的简单的数学概念如线性方程被演化成了复杂而强大的工具,用于解决现实世界中的预测问题。这里不仅解释了线性模型的基础原理,还探讨了如何通过添加非线性组件如ReLU函数或Sigmoid函数,将模型提升到一个新的层次。线性模型的局......
  • VBA代码解决方案第十七讲:如何选择一个工作表,如何选择多个工作表
    《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程,目前已经是第三版修订了。这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码摆好。这套教程共三册,一百四十七讲,内容覆......
  • day14打卡
    最大二叉树classSolution{public:intgetmax(vector&vec){intindex=0;intmax=INT_MIN;for(inti=0;i<vec.size();++i){if(max<vec[i]){max=vec[i];index=i;}}returnindex;}TreeNode*traversal(vector&nums){if(nums.empt......
  • day13打卡
    树左下角值classSolution{public:voidtraversal(TreeNoderoot,intdepth,int&ret,int&maxdepth){if(root->left==nullptr&&root->right==nullptr){if(depth>maxdepth){maxdepth=depth;ret=root->val;}}if(root->......