单链表反转 LeetCode 206

简介: 单链表反转 LeetCode 206

单链表反转 2种方法

  1. 空间换时间
  2. 时间换空间
package com.stan.work;
public class Step1 {
    /**
     * 单链表反转     206
     * 链表中环的检测  141
     * 两个有序的链表合并
     * 删除链表倒数第 n 个结点
     * 求链表的中间结点
     */
    /**
     * 自定义链表
     */
    public static class MyLinkNode {
        int val;
        MyLinkNode next;
        MyLinkNode() {
        }
        MyLinkNode(int val) {
            this.val = val;
        }
        MyLinkNode(int val, MyLinkNode next) {
            this.val = val;
            this.next = next;
        }
    }
    public static void main(String[] args) {
        MyLinkNode head = new MyLinkNode(1);
        MyLinkNode node1 = new MyLinkNode(2);
        MyLinkNode node2 = new MyLinkNode(3);
        MyLinkNode node3 = new MyLinkNode(4);
        head.next = node1;
        node1.next = node2;
        node2.next = node3;
        MyLinkNode node = reverseList(head);
        while (node != null) {
            System.out.print(node.val + " ");
            node = node.next;
        }
        System.out.println();
    }
    /**
     * 迭代翻转
     *
     * @param head
     * @return
     */
    public static MyLinkNode reverseList(MyLinkNode head) {
        MyLinkNode curr = head;
        MyLinkNode prev = null;
        while (curr != null) {
            // 先换指针位置 再换next值
            MyLinkNode next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }
        return prev;
    }
    /**
     * 递归翻转
     *
     * @param head
     * @return
     */
    public static MyLinkNode reverseList1(MyLinkNode head) {
        //递归出口
        if (head == null || head.next == null) {
            return head;
        }
        //先递后归
        MyLinkNode p = reverseList1(head.next);
        head.next.next = head;
        head.next = null;
        return p;
    }
    public static void searchNode(MyLinkNode head) {
        if (head == null) {
            return;
        }
        while (head != null && head.next != null) {
            System.out.print(head.val);
        }
    }
}


目录
相关文章
|
JSON 监控 前端开发
python对接API二次开发高级实战案例解析:Zabbix API封装类实现获取认证密钥、所有主机组、所有主机、所有监控项和历史数据
python对接API二次开发高级实战案例解析:Zabbix API封装类实现获取认证密钥、所有主机组、所有主机、所有监控项和历史数据
772 0
|
数据采集 存储 JSON
基于qwen2.5开源大模型 处理 环境、社会及治理 相关资料
基于Qwen-2.5开源大模型,本方案旨在处理环境、社会及治理(ESG)相关资料,涵盖数据分析、决策辅助和报告生成等任务。方案详细描述了从数据准备、模型功能设计到部署优化的全过程,并列举了多种应用场景,如企业合规审查、投资评估支持等,旨在为企业、机构和研究者提供全面的ESG资料处理解决方案。
566 0
|
安全
跨域
跨域问题在Web开发中较为常见,开发人员需要根据具体的项目需求和场景选择合适的跨域解决方案。在实际应用中,CORS和代理服务器是比较常用的方法,而JSONP和WebSockets则适用于一些特定的业务场景。
368 49
|
SQL 缓存 关系型数据库
MySQL Limit实现原理
本文详细探讨了MySQL中`LIMIT`子句的实现原理及其在不同场景下的应用。`LIMIT`用于控制查询结果的行数,结合`OFFSET`可实现分页查询。其内部实现涉及解析器、优化器和执行器三部分,通过索引利用、子查询优化等提升性能。文章还提供了性能优化策略,如索引优化、覆盖索引及延迟关联等,并给出实践建议。
455 3
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL的Memory存储引擎
MySQL 的存储引擎层负责数据的存储和提取,支持多种存储引擎,如 InnoDB、MyISAM 和 Memory。InnoDB 是最常用的存储引擎,从 MySQL 5.5.5 版本起成为默认引擎。Memory 存储引擎的数据仅存在于内存中,重启后数据会丢失。示例中创建了使用 Memory 引擎的 test3 表,并展示了数据在重启后消失的过程。
234 0
|
安全 Linux 文件存储
在Linux中,服务器开不了机怎么解决⼀步步的排查?
在Linux中,服务器开不了机怎么解决⼀步步的排查?
|
存储 Ubuntu 网络协议
轻松搭建Nextcloud私有云盘并实现公网访问本地资源
轻松搭建Nextcloud私有云盘并实现公网访问本地资源
运行PaddleDetection报错问题
PaddleDetection没有找到文件解决
|
开发框架 Unix Linux
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
247 0
|
开发工具 C语言 git
libusb + libuvc 环境搭建
libusb + libuvc 环境搭建
2476 0