题目:

反转一个单链表。示例:输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决方法:

package com.xinyu.test;/*** Created by zy on 2019/4/16.*/
public class TestArray12 {public static void main(String[] args) {ListNode listNodeOne = new ListNode(2);ListNode listNodeOne1 = new ListNode(4);ListNode listNodeOne2 = new ListNode(3);ListNode listNodeOne3 = new ListNode(5);listNodeOne.next = listNodeOne1;listNodeOne1.next = listNodeOne2;listNodeOne2.next = listNodeOne3;ListNode listNode = reverseList(listNodeOne);System.out.println(listNode);}/**反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?*///实现1
//    public static ListNode reverseList(ListNode head) {
//        ListNode tail = null;
//        while (head != null){
//            ListNode node = new ListNode(head.val);
//            if (tail == null) {
//                tail = node;
//            }else {
//                node.next = tail;
//                tail = node;
//            }
//            head = head.next;
//        }
//        return tail;
//    }//实现2  我自己写的的递归  太垃圾了。。。。
//    public static ListNode reverseList(ListNode head) {
//        if (head == null) {
//            return null;
//        }else {
//            ListNode newHead = new ListNode(head.val);
//            ListNode listNode = reverseList(head.next);
//            if (listNode != null) {
//                ListNode next = listNode.next;
//                if (next == null) {
//                    listNode.next = newHead;
//                }else {
//                    while (next.next != null){
//                        next = next.next;
//                    }
//                    next.next = newHead;
//                }
//                return listNode;
//            }else {
//                return newHead;
//            }
//        }
//    }/*** 网上的别人写的  定义了三个容器去保存前一个,当前,和后一个、* 首先保存后一个next,然后对当前的节点cur进行操作* 然后把当前的cur 的下一个赋值为前一个pre* 然后cur 赋值为pre* 最后cur 赋值为next** @param head* @return*/
//    public static ListNode reverseList(ListNode head) {
//        ListNode current = head;
//        ListNode pre = null;
//        ListNode next;
//        while (current != null) {
//            // 取出 next
//            next = current.next;
//            // 将上一个赋值给 next
//            current.next = pre;
//            // 更改 上一个到当前位置
//            pre = current;
//            // 当前位置往下移动
//            current = next;
//        }
//        return pre;
//    }//递归实现public static ListNode reverseList(ListNode head) {//方法一:
//        ListNode listNode = head;
//        if (head !=null && head.next !=null) {
//            listNode = reverseList(head.next);
//            head.next.next = head;
//            head.next = null;
//        }
//        return listNode;//        方法二: 递归if (head == null || head.next == null) {return head;}ListNode listNode = reverseList(head);head.next.next = head;head.next = null;return listNode;}static class ListNode {int val;ListNode next;ListNode(int x) { val = x; }}}

总结:

一天不学算法,就要变傻瓜。
坚持每天抽时间,当成享受去做。
算法不能停。
停一段时间之后,发现自己啥都不会了。

算法---------数组-----------翻转单链表相关推荐

  1. c语言用单链表实现lru算法,手写单链表实现和LRU算法模拟

    手写单链表,实现增删改查 package top.zcwfeng.java.arithmetic.lru; //单链表 public class LinkedList { Node list; int ...

  2. 数组模拟单链表acwing826. 单链表

    文章目录 单链表一道题 数组模拟单链表模板 初始化链表 向表头插入数 在下标为k的节点的下一个位置插入节点 删除下标为k的节点的下一个节点 单链表一道题 单链表题目 实现一个单链表,链表初始为空,支持 ...

  3. 数据结构与算法 完整版单链表(附GIF)

    因为博主认为单链表是非常重要的数据结构,能够熟练使用单链表的话后面的数据结构会越学越轻松,所以博主就把这篇博客做的细致一点,不是很好懂的地方做成 gif 动画,希望大家能理解期中代码的含义 学习链表的 ...

  4. cc150:实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针

    实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针. 例子: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不需要返回什么,得到一个新链表:a-& ...

  5. (数据结构)1.实现顺序表的各种基本运算的算法 2.实现单链表的各种基本运算的算法

    实验内容 1.编写一个程序sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个程序exp2-1.cpp完成以下功能. ( ...

  6. 试写一算法,对单链表进行逆置

    NOTICE: 本篇代码是按照源码的书写顺序所写,复制之后可直接运行. 环境: vscode 题目: 试写一算法,对单链表进行逆置 分析: 单链表的逆置需要设置两个指针,第一个进行遍历单链表:第二个进 ...

  7. TypeScript算法专题 - blog4 - 单链表节点的两-两翻转(两两一组逆序)

    TypeScript数据结构与算法专题 - [单链表4] 单链表节点的`两-两`反转的实现 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 专题目录:https://blo ...

  8. Java数据结构和算法:数组、单链表、双链表

    1. 概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的 ...

  9. TypeScript算法专题 - blog5 - 单链表节点的`任意k个分组反转`的实现

    TypeScript数据结构与算法专题 - [单链表5] 单链表节点的`任意分组反转`实现 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 专题目录:https://blo ...

最新文章

  1. (转载)BPM流程管理的将才是你吗
  2. 比特币钱包(5) BIP44 账户表示形式
  3. 支付系统信息流和资金流
  4. Handler原理分析
  5. cisco hsrp备份小实验
  6. centof7无法上网问题
  7. mysql日期为00_MySQL 8.0.13设置日期为0000-00-00 00:00:00时出现的问题解决
  8. 非计算机专业考研软件工程,#考研报名#计算机类、软件工程类考生报名前必看...
  9. 时域采样定理MATLAB实现
  10. gateface php,XAMPP下载-Xampp(PHP环境套件)V8.01 官方win版-ucbug软件站
  11. 计算机一级如何添加对角线,如何在表格中添加对角线
  12. 计数器(Verilog)
  13. Mybati从持久层到大气层
  14. 802.11基本概念介绍【802.11 无线网络权威指南学习总结1】
  15. win10无法打开组策略,gpedit.msc打不开
  16. LMS算法的基本理论和MATLAB仿真
  17. BUU-2019极客大挑战全集
  18. 关于mac上输入 insert和replace的快捷键切换
  19. 电子信息类课程自学路线
  20. 让某个应用以指定时间运行

热门文章

  1. 数电实验报告实验一_大二下学期的两三事之数电实验amp;课设
  2. sqlplus可以连接plsql连接不上_为什么有的iPhone/iPad连接不上电脑?
  3. 单链表的插入和删除_从0开始的编程之梦——数据结构之单链表的基本运算
  4. PPIO 商业化架构解析
  5. 通过describe命令学习Kubernetes的pod属性详解
  6. vs2013 类名颜色显示黑色,无法修改
  7. SQL Server 中@@IDENTITY的用法
  8. FreeBSD下安装配置Hadoop集群(一)
  9. 搜索引擎优化 SEO
  10. java Random类详解