1.概述

转载:https://www.jb51.net/article/136185.htm

遇到了这个问题,记录一下

2.案例1

2.1 实现思路

递归:从尾部开始处理


非递归:从头部开始处理

2.2 实现

package com.algorithm.common.link.reverse;/*** @author: chuanchuan.lcc* @date: 2021-06-03 22:50* @modifiedBy: chuanchuan.lcc* @version: 1.0* @description:*/
public class LinkReverseDemo2 {public static void main(String[] args) {Node A = new Node("A");Node B = new Node("B");Node C = new Node("C");Node D = new Node("D");Node E = new Node("E");Node F = new Node("F");A.next = B;B.next = C;C.next = D;D.next = E;E.next = F;print(A);LinkedListReversor reversor = LinkedListReversor.RECURSION;System.out.println(reversor.getStrategy() + ":");Node tmp = reversor.execute(A);print(tmp);reversor = LinkedListReversor.NO_RECURSION;System.out.println(reversor.getStrategy() + ":");print(reversor.execute(tmp));}public static void print(Node node) {while (node != null) {System.out.print(node.value);node = node.next;if (node != null) {System.out.print("->");} else {System.out.println();}}}}class Node {public String value;public Node next;public Node(String value) {this.value = value;}
}enum LinkedListReversor {RECURSION("递归") {@Overridepublic Node execute(Node node) {Node prev = null;if (node == null || node.next == null) {prev = node;System.out.println("节点末尾:" + node.value);} else {System.out.println("节点有下游节点" + node.value);Node tmp = execute(node.next);System.out.println("递归返回节点tmp.value " + tmp.value);System.out.println("递归返回节点node.value " + node.value);System.out.println("递归返回节点node.next.value " + node.next.value);if(node.next.next != null){System.out.println("递归返回节点node.next.next.value " + node.next.next.value);}node.next.next = node;node.next = null;prev = tmp;if(node.next != null){System.out.println("将节点" + node.next.value + " 指向节点:" + node.value);}System.out.println("将节点" + node.value + " 的node.next指向空节点:" );}LinkReverseDemo2.print(prev);return prev;}},NO_RECURSION("非递归") {@Overridepublic Node execute(Node node) {Node prev = null;while (node != null) {Node tmp = node;node = node.next;tmp.next = prev;prev = tmp;}return prev;}};private String strategy;private LinkedListReversor(String strategy) {this.strategy = strategy;}public abstract Node execute(Node node);public String getStrategy() {return strategy;}
}

【java】Java实现单向链表反转相关推荐

  1. Java单向链表反转

    要求 给出单链表的头节点 head ,要求反转链表,并返回反转后的链表. 实现原理 单向链表反转就是将链表的指针方向改变.由于单链表没有指向前一个结点的指针,所以,我们定义一个指向前一个节点的指针pr ...

  2. 反转单向链表java_Java实现单向链表反转

    本文实例为大家分享了Java实现单向链表反转的具体代码,供大家参考,具体内容如下 1.实现代码 public class LinkedListTest { public static void mai ...

  3. 经典算法——单向链表反转

    1. 题目 单向链表反转是一道经典的求职面试笔试或机试题.给定如下如下链表的节点定义: struct LinkNode {int value;LinkNode* next; }; 比如有一个链表是这样 ...

  4. 【Java】使用单向链表实现一个队列(Queue)

    队列(Queue)是数据结构的一种,元素存储满足的特征是先入的先出(类似于现实生活中的排队这一场景) 队列的实现可以使用双向链表,也可以使用单向链表: 在使用单向链表实现队列时候,需要多加一个记录尾结 ...

  5. 单向链表反转(倒置)问题

    今天遇到单向链表的反转的问题,于是静下心来好好想了一番. 解题思路如下图: 假设当前创建好的链表如下: 首先让头节点与第一个元素节点断开,但是要注意在断开之前需要用p指针指向第一个元素节点来保存第一个 ...

  6. 单向链表反转(逆置)

    参考 #include <iostream> using namespace std;class List { public://节点结构struct Node{int data;Node ...

  7. 不愧是Alibaba技术官,java数组实现单向链表

    缓存雪崩 缓存雪崩指的是Redis当中的大量缓存在同一时间全部失效,而假如恰巧这一段时间同时又有大量请求被发起,那么就会造成请求直接访问到数据库,可能会把数据库冲垮. 缓存雪崩一般形容的是缓存中没有而 ...

  8. java判断一个单向链表是否有环路

    今天刷LeetCode刷到一道这样的题,详情参见(https://leetcode-cn.com/problems/linked-list-cycle/) ADT: class ListNode { ...

  9. 算法详解——单向链表反转

    一.问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 二.分析问题 1.递归法 首先来考虑两个节点的基本情况,假设链表head有两个节点,只需要让head->n ...

最新文章

  1. 单片机联网,UIP实现tcp/udp协议
  2. 基于linux的netfilter处理数据包的过程分析,基于Netfilter的网络数据包分析
  3. [Git GitHub] Windows下安装git,从0开始搭建git环境(配置环境变量+设置git-ssh key...配置)(超全版)
  4. Git的安装与使用教程
  5. SpringSecurity3整合CAS实现单点登录
  6. linux yum源码安装mysql_linux下通过源码包安装mysql,以及yum安装
  7. 印象笔记再WIN10同步失败解决方法
  8. android PopupWindow实现从底部弹出或滑出选择菜单或窗口
  9. 【图神经网络入门】GAT图注意力网络
  10. 双系统下Ubuntu完整卸载
  11. SEEDLab DNS_Remote Attack 实验报告
  12. 隐形窗口_建立网站时要考虑的隐形(但至关重要)注意事项
  13. 没人比程序员更讨厌软件
  14. 统计学基础之常用统计量和抽样分布
  15. Java截取String字符串的几种方法
  16. 鸿蒙系统如何进入语音助手,原来华为手机的语音助手还可以这么玩,九个实用技能分享给你...
  17. Oracle索引比表大
  18. CCF-CSP 小中大 C语言
  19. Vultr CentOS主机无法登录/循环登录/SSH拒绝连接以及使用Finnix恢复系统
  20. cannot be cast to javax.servlet.Servlet 解决

热门文章

  1. IBM 2nm芯片弯道超车了?他连车都没有
  2. 华为员工“削尖脑袋”想进荣耀!网友也可以放心了,荣耀产品售后不受影响...
  3. 双十一快到了,快递却不干了?
  4. 华为Mate 40 Pro+真机现身:外观实锤,价格近万!
  5. 智能网联车初现规模 360 Sky-Go团队“把脉”安全风口
  6. 笑喷!小区封闭男子将头伸出围栏外理发:又好笑又心酸
  7. 3千内!苹果最便宜iPhone稳了:坐等
  8. 10月份中国发货!华为Mate X这次真的没跑了
  9. 百度再显管理变革决心 副总裁郑子斌离职
  10. 消息称小米之家全面取消员工销售提成 回应:内容严重偏颇失实