news 2026/10/8 3:25:31

关于链表中元素的交换的操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于链表中元素的交换的操作

给定一个链表,对于每两个相邻的结点,交换其位置。

如 1->2->3->4->null,返回2->1->3->4->null

只能对结点进行操作,不能修改结点的值,只能操作结点(整个)或结点对应的指针。

分析:因为头结点没有前驱,不便于遍历,需要添加一个虚拟头结点,始终让该结点指向实际链表的头结点。

注意:想不清楚就画图,要明白每一个变量的含义和作用。其实next指针可以不用的,自己想想如何处理。

共用代码:

​ public class ListNode { public int val; public ListNode next; public ListNode(int x) { this.val = x; this.next = null; } public static ListNode createList(int[] nums) { if(null == nums || 0 == nums.length) return null; ListNode head = new ListNode(nums[0]); ListNode needle = head; for(int i = 1; i < nums.length;++i) { ListNode node = new ListNode(nums[i]); needle.next = node; needle = needle.next; needle.next = null; } return head; } }
// 24 使用虚拟头结点 public ListNode swapPairs(ListNode head) { ListNode dummyHead = new ListNode(-1); dummyHead.next = head; ListNode pre = dummyHead; // 链表必须至少两个结点才可以交换,不好理解画图会更直观 while (pre.next != null && pre.next.next != null) { // 指向待交换的第一个结点 ListNode node1 = pre.next; // 指向待交换的第二个结点 ListNode node2 = node1.next; // 记录待交换的第二个结点的下一个结点,避免剩余结点的丢失 ListNode next = node2.next; // 真正的交换,交换的是指针的指向 node2.next = node1; node1.next = next; // 移动指针,为下次交换做准备,第一个node2是新的头结点 pre.next = node2; // 指针向前移动2个位置(注意while中用的是pre.next和pre.next.next) pre = node1; } return dummyHead.next; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 0:26:04

【time-rs】Duration 结构体详解

这是一个 Rust 时间库中的 Duration 结构体实现&#xff0c;提供高精度的时间跨度表示。 1. 主要特性 纳秒级精度&#xff1a;由整秒和纳秒部分组成支持负值&#xff1a;与标准库的 std::time::Duration 不同&#xff0c;支持负时间间隔安全边界检查&#xff1a;使用 RangedI32…

作者头像 李华
网站建设 2026/10/8 1:30:09

10398_基于SSM的教学评价管理系统

1、项目包含项目源码、项目文档、数据库脚本、软件工具等资料&#xff1b;带你从零开始部署运行本套系统。2、项目介绍教学评价系统是以Java平台作为开发环境&#xff0c;采用MySQL数据库作为后台&#xff0c;使用Eclipse作为开发工具进行设计。本系统主要实现了教学评价模块、…

作者头像 李华
网站建设 2026/10/7 6:46:26

Go语言变量

Go变量声明的核心机制 静态类型语言要求变量在使用前必须声明&#xff0c;明确内存边界。Go作为静态语言&#xff0c;通过变量声明实现这一机制&#xff1a; 变量绑定特定内存区域&#xff0c;类型信息确定操作边界声明形式为&#xff1a;var 变量名 类型 值未显式初始化时自动…

作者头像 李华
网站建设 2026/10/7 12:00:00

【高可用系统架构】

系统高可用实现手段 冗余与无单点设计 部署关键节点时避免单点故障&#xff0c;例如负载均衡采用双节点Keepalived方案&#xff08;如Nginx/HAProxy/LVS&#xff09;&#xff0c;通过虚拟IP实现故障自动切换。网络通信配置多线路&#xff08;如移动电信双线&#xff09;&#x…

作者头像 李华
网站建设 2026/10/8 4:17:25

高频软件测试基础面试题

在软件测试的面试过程中&#xff0c;面试官会问些基础的软件测试知识&#xff0c;下面为大家整理了一些高频软件测试面试必备的基础题&#xff0c;拿走不谢~ 一、什么是软件测试 为了发现程序中的错误而执行程序的过程。 二、软件测试的原则 1、完全测试程序是不可能的 2、…

作者头像 李华
网站建设 2026/10/7 14:23:43

如何准确判断json文件并且拿到我想要的信息

写在前面&#xff0c;自从发现拿到json解析后的文件中有我们想要的信息后&#xff0c;我稍微有点迷上这种方法&#xff0c;但是拿到内容后要怎么拿到想要的信息呢&#xff0c;字典列表相互嵌套&#xff0c;我头都晕了方法&#xff1a;首先就是把json解析后的文本保存成.json的形…

作者头像 李华