算法Day-4

embedded/2024/10/20 17:07:56/

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

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

本题意思为要求我们两两交互链表中的节点,而不是直接修改链表的值

我们可以定义一个虚拟头节点,让其指向头节点,从而使头节点和下一个节点进行交互。       

再while循环中判断如果cur.next不为空并且cur.next.next也不为空时才能进行交互,意思是当虚拟头节点的下两位有节点才能交互。然后在交互的过程中首先要将cur指向它的下两位,为了避免头节点找不到我们需要事先将头节点存入临时节点中,并且将第三位节点也就是转换完要连接的节点也保存下来这里叫它第三节点。将cur 指向第二节点后,将cur.next.next指向头节点我们刚刚保存的临时节点,在将cur.next.next.next指向第三节点。然后将cur向下移动两个节点。依次循环

    /*** Definition for singly-linked list.* public class ListNode {*     public int val;*     public ListNode next;*     public ListNode(int val=0, ListNode next=null) {*         this.val = val;*         this.next = next;*     }* }*/public class Solution {public ListNode SwapPairs(ListNode head) {ListNode dummyNode= new ListNode();dummyNode.next = head;ListNode cur = dummyNode;while(cur.next!=null&&cur.next.next!=null){ListNode firstNode = cur.next;ListNode thirdNode = cur.next.next.next;cur.next = cur.next.next;cur.next.next = firstNode;cur.next.next.next = thirdNode;cur = cur.next.next;}return dummyNode.next;}}

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

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

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

本题思路,因为链表没有直接获取长度的方法,我们可以使用双指针,快慢指针进行定义并且赋值为虚拟头节点,然后我们让快指针先移动n个节点因为要删除倒数第n个节点,我们让快慢指针相差n个节点就可以实现当快指针移动到next为null时慢指针正好在要删除的节点前一个从而实现删除操作。

/*** Definition for singly-linked list.* public class ListNode {*     public int val;*     public ListNode next;*     public ListNode(int val=0, ListNode next=null) {*         this.val = val;*         this.next = next;*     }* }*/
public class Solution {public ListNode RemoveNthFromEnd(ListNode head, int n) {ListNode dummyNode = new ListNode(0,head);ListNode fast = dummyNode;ListNode slow = dummyNode;for(int i = 0;i<n;i++){fast = fast.next;}while(fast.next!=null){fast = fast.next;slow = slow.next;}slow.next = slow.next.next;return dummyNode.next;}
}

该题输入相交值为val,和相交节点的在每个链表的位置。从0开始,我们需要返回相交节点为头节点的链表,这里我们将两个链表头节点赋值个两个临时节点,遍历这两个链表,如果当前节点不为空就指向当前链表下一个,如果为空就将另一个链表赋值给当前节点,再次遍历,两个节点相等,结束返回一个即可。

/*** Definition for singly-linked list.* public class ListNode {*     public int val;*     public ListNode next;*     public ListNode(int x) { val = x; }* }*/
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;}
}


http://www.ppmy.cn/embedded/129040.html

相关文章

【深度学习|地学应用】Aerosol——宏观层面分析地震气溶胶异常——采用 HYSPLIT-4模型模拟地震AOD异常的水平和垂直后向轨迹

【深度学习|地学应用】Aerosol——宏观层面分析地震气溶胶异常——采用 HYSPLIT-4模型模拟地震AOD异常的水平和垂直后向轨迹 【深度学习|地学应用】Aerosol——宏观层面分析地震气溶胶异常——采用 HYSPLIT-4模型模拟地震AOD异常的水平和垂直后向轨迹 文章目录 【深度学习|地学…

纯血鸿蒙!

纯血鸿蒙&#xff0c;这是哪个营销大师给起的名字啊&#xff01; 纯血&#xff01;象征着高贵、自信、自主、血性、英雄气概&#xff0c;都融入这纯血鸿蒙了&#xff01; 鸿蒙本就是开天辟地&#xff0c;加上纯血&#xff0c;真是荡气回肠&#xff01; 鸿蒙的推出背景 我们前…

面试手撕代码-二十三种设计模式之模版方法模式

package com.study.handcode.设计模式.行为型模式;import java.io.InputStream;public class 二十三种设计模式之模版方法模式 {public static void main(String[] args) {/*** 1、模版方法就是在抽象类中提供了一个算法流程&#xff0c;但是这个算法流程中有一些抽象方法&…

stm32启动时用到的systeminit、__main说明

先运行systeminit函数&#xff0c;其功能&#xff1a;初始化时钟&#xff08;SYSCLK, HCLK, PCLK2 and PCLK1 prescalers&#xff09;、配置中断向量表&#xff08;中断向量表的定位是在flash还是SRAM&#xff09;再运行__main函数&#xff1a; 作用&#xff1a;Initializatio…

Flutter 中的 PopScope 小部件:全面指南

Flutter 中的 PopScope 小部件&#xff1a;全面指南 在 Flutter 应用开发中&#xff0c;导航和路由管理是构建复杂应用时必须面对的挑战之一。PopScope 小部件是 Flutter 2.0 版本引入的一个新功能&#xff0c;它提供了一种更灵活的方式来控制页面的弹出和返回行为。本文将带你…

JVM进阶调优系列(2)字节面试:JVM内存区域怎么划分,分别有什么用?

像字节、阿里、腾讯、美团、京东等大厂面试&#xff0c;JVM调优必问必答必会的问题&#xff0c;重要性不言而喻。 上篇文章详细分析了类加载器类型、双亲委派机制优缺点、以及如何打破双亲委派机制。末尾我们留了一个问题&#xff1a;类加载到内存过程具体会经过那些流程&#…

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行 引言 在现代应用开发中&#xff0c;随着业务需求的增长&#xff0c;数据库表结构和数据往往需要进行迁移和更新。迁移&#xff08;Migration&#xff09;是指对数据库表的结构、数据类型、索引、约束等进行修改或更新…

【python_修改PPT中字体,run.font.name只对英文生效怎么办?】

python_修改PPT中字体&#xff0c;run.font.name只对英文生效怎么办&#xff1f; 参考&#xff1a;使用pptx_ea_font库设置中文字体 from pptx import Presentation from pptx.util import Pt from pptx_ea_font import set_font# 打开现有的 PPT 文件 prs Presentation(D:\…