当前位置: 首页 > news >正文

代码随想录算法训练营--打卡day3

复习:标注感叹号的需要在电脑上重新做几遍 

 一.两两交换链表中的节点!!

1.题目链接 

24. 两两交换链表中的节点 - 力扣(LeetCode)

2.思路

画图

3.代码

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummy=new ListNode(0);
        dummy.next=head;
        ListNode cur=dummy;
        while(cur.next!=null&&cur.next.next!=null){
            ListNode tmp1=cur.next;
            ListNode tmp2=cur.next.next.next;
            cur.next=cur.next.next;
            cur.next.next=tmp1;
            tmp1.next=tmp2;
            cur=cur.next.next;
        }
        return dummy.next;
        
    }
}

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

1.题目链接

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

2.思路

通过虚拟头结点(处理头结点本身需要删除的情况)+快慢指针差N步(精准定位待删节点的前驱)

3.代码

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy=new ListNode(0);
        dummy.next=head;
        ListNode slow=dummy;
        ListNode fast=dummy;
        while(n>0){
            fast=fast.next;
            n--;
        }
        while(fast.next!=null){
            slow=slow.next;
            fast=fast.next;
        }
        slow.next=slow.next.next;
        return dummy.next;
    }
}

 三.链表相交

1.题目链接

面试题 02.07. 链表相交 - 力扣(LeetCode)

2.注意点!!

  p=p==null?headB:p.next;
  q=q==null?headA:q.next;

3.代码

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode p=headA;
        ListNode q=headB;
        while(p!=q){
           p=p==null?headB:p.next;
           q=q==null?headA:q.next;
        }
        return p;
    }
}

四.环形链表!!


1.题目链接

142. 环形链表 II - 力扣(LeetCode)

2.易错点

while()循环条件

3.代码

public class Solution {
    public ListNode detectCycle(ListNode head) {
        // 初始化快指针和慢指针,都指向头节点
        ListNode fast = head;
        ListNode slow = head;
        // 当快指针和快指针的下一个节点都不为空时,继续循环
        while (fast != null && fast.next != null) {
            // 快指针每次移动两步
            fast = fast.next.next;
            // 慢指针每次移动一步
            slow = slow.next;
            // 如果快慢指针相遇,说明链表中存在环
            if (fast == slow) {
                // 让一个指针从头节点开始,另一个指针从相遇点开始
                while (head != fast) {
                    // 头指针和相遇点指针同时移动一步
                    head = head.next;
                    fast = fast.next;
                }
                // 当它们再次相遇时,相遇点就是环的起始节点
                return head;
            }
        }
        // 如果循环结束都没有相遇,说明链表中不存在环,返回 null
        return null;
    }
}

http://www.dtcms.com/a/98865.html

相关文章:

  • HTML元素小卖部:表单元素 vs 表格元素选购指南
  • 从零开始研发GPS接收机连载——19、自制GPS接收机的春运之旅
  • 《Spring Cloud Eureka 高可用集群实战:从零构建高可靠性的微服务注册中心》
  • 【RabbitMQ】Linux上安装RabbitMQ详细步骤
  • 全球化2.0 | ZStack举办香港Partner Day,推动AIOS智塔+DeepSeek海外实践
  • 嵌入式libc
  • [创业之路-344]:战略的本质是选择、聚焦, 是成本/效率/低毛利优先,还是差易化/效益/高毛利优先?无论是成本优先,还是差易化战略,产品聚焦是前提。
  • 基于HTML5和CSS3实现3D旋转相册效果
  • linux课程学习二——缓存
  • JAVA的内存图理解
  • C/C++回调函数实现与std::function和std::bind介绍
  • 综合实验2
  • std::scoped_lock vs std::unique_lock:多线程锁的选择指南
  • mysql.8.4.4主从配置--IOthread:NO
  • 图解CMS原理是什么?漏标+多标+浮动垃圾 如何解决?
  • LeetCode1两数之和
  • Ubuntu社区论坛正确网址
  • Elea AI:以人工智能之力推动病理实验室革新的技术突破与实践探索
  • 10-项目需求变更时如何处理
  • sqli-labs靶场 less 9
  • Banner区域
  • Cursor 汉化教程
  • react学习
  • C++中的new、malloc、realloc、calloc——特点?函数原型?释放方式?区别?校招面试常问内容?
  • 中断管理常用API(四)
  • 马斯克:1130 亿美元的操作,X 网友:有点感觉被卖了…
  • 基于烟花算法(Fireworks Algorithm,FWA)及三次样条的机器人路径规划,50个场景任意选择,完整MATLAB代码
  • C语言学习笔记(抱佛脚版)
  • MyBatis基础三(注解开发)
  • 迅为iTOP-RK3576人工智能开发板Android 系统接口功能测试