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

题目链接

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

思路

核心思路是通过「虚拟头节点 + 节点删除 / 插入」的方式实现两两交换:

  1. 先创建一个虚拟头节点(dummy) 指向原链表头节点,避免处理头节点交换的特殊情况;
  2. 遍历链表时,每次定位到需要交换的两个相邻节点(记为 first、second);
  3. 先将 first 节点从原位置 “删除”,再将 first 节点插入到 second 节点的后面;
  4. 移动遍历指针,重复上述过程直到所有两两节点交换完成。

图解过程

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

1.初始化链表

ListNode dummy = new ListNode(-1, head);

ListNode cur = dummy;

重复上面过程

代码

importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclass 两两交换链表中的节点 {staticclassListNode{int val;ListNode next;ListNode(int val){this.val = val;}ListNode(int val,ListNode next){this.val = val;this.next = next;}}staticBufferedReader in =newBufferedReader(newInputStreamReader(System.in));publicstaticvoidmain(String[] args)throwsIOException{String[] s = in.readLine().split(" ");ListNode head =newListNode(Integer.parseInt(s[0]));ListNode cur = head;// 1 2 3for(int i =1; i < s.length; i++){ListNode node =newListNode(Integer.parseInt(s[i])); cur.next = node; cur = cur.next;}ListNode newHead =swapPairs(head); cur = newHead;while(cur !=null){System.out.print(cur.val +" "); cur = cur.next;}}// 思路 删除第一个节点 并记录 然后放到第二个节点后面publicstaticListNodeswapPairs(ListNode head){if(head ==null|| head.next ==null){return head;}ListNode dummy =newListNode(-1, head);ListNode cur = dummy;while(cur.next !=null&& cur.next.next !=null){// 记录第一个节点ListNode first = cur.next;// 删除第一个节点 cur.next = cur.next.next;// 记录后面的节点ListNode second = cur.next.next; cur.next.next = first; first.next = second; cur = cur.next.next;}return dummy.next;}}

Read more

详解常见排序

详解常见排序

目录 编辑 插入排序 希尔排序(缩小增量排序) 选择排序 冒泡排序 堆排序 快速排序 hoare版  挖坑法 前后指针法 非递归版 归并排序 递归版 非递归版 计数排序 声明:以下排序代码由Java实现!!! 插入排序 步骤: 1.我们可以认为数组的第一个元素已经被排好序,因此只需考虑对后面的元素进行插入排序; 2.取下一个位置的元素val,让它和它之前的元素进行比较,顺序为从右向左; 3.如果该元素大于val,则将该元素移动到该元素所处位置的下一个位置; 4.重复步骤3,知道找到已排好序的序列中小于等于val的元素; 5.将值val放到该位置的下一个位置,如果已排好序的所有元素的值都大于val,则将val存放到数组下标为0的位置; 6.重复2~5步骤。 动画演示: 代码如下: public static void insertSort(int[] array){ for(

By Ne0inhk
【保姆级】TrendRadar本地部署:告别算法推荐,打造个人专属AI热点情报局

【保姆级】TrendRadar本地部署:告别算法推荐,打造个人专属AI热点情报局

【保姆级】TrendRadar本地部署:告别算法推荐,打造个人专属AI热点情报局 摘要 本文基于 TrendRadar 项目,详细拆解如何通过 Docker 本地部署一套个人专属的 AI 热点情报系统。涵盖从环境准备、Docker 镜像拉取、局域网访问配置、飞书推送修复到 Cherry Studio MCP 服务对接的全流程。通过 Nvidia 免费模型 API,实现零成本的深度热点分析与趋势追踪。 关键词: TrendRadar, Docker部署, AI热点分析, MCP服务, Cherry Studio 1. 背景与需求:为什么我们需要 TrendRadar? 在这个大数据算法横行的时代,我们每天被头条、抖音等平台“投喂”大量信息,不仅容易陷入信息茧房,还浪费了大量时间筛选有效资讯。 我的核心需求很简单: 1. 拒绝算法绑架:需要一个个人定制化的新闻推送服务。 2.

By Ne0inhk
【强化学习】双延迟深度确定性策略梯度算法(TD3)详解

【强化学习】双延迟深度确定性策略梯度算法(TD3)详解

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:        【强化学习】- 【单智能体强化学习】(11)---《双延迟深度确定性策略梯度算法(TD3)详解》 双延迟深度确定性策略梯度算法(TD3)详解 目录 一、TD3算法的背景 二、TD3的背景 1.TD3的理论背景 2.DDPG的局限性 三、TD3算法的核心思想 1.双Critic网络(Twin Critics) 2.延迟更新(Delayed Policy Updates) 3.目标策略平滑(Target Policy Smoothing) 四、TD3算法详细讲解 1.

By Ne0inhk