链表反转的三种方法

  1. 普通链表反转法
  • 思想:借助三个Node变量进行节点的移动,促成next指向变化,从而使链表反转
  1. 递归链表反转法
  • 思想:想像一个反转成功的链表与剩下的头节点的反转,思考如何进行,只要拆分出来的相似问题解决好了,就直接可用调用自己的方法进行解决
  1. 头节点链表反转法
  • 借助头节点以及新节点(newNode=null),这里是一个循环,条件为头不为空,第一步保存头节点为temp,第二步头节点指向它的下一个节点,保存好的头节点的下一个节点指向新节点(此时反转成功,再把newNode后移就行)
package com.javase.reverselink;public class ReverseLink {public static void main(String[] args) {Node<Integer> head =buildLink();Node<Integer> newNode =recursiveReverseLink(head);print(newNode);}public static  Node<Integer> reverseLink(Node<Integer> head){//提前判断,如果链表的长度为0或1,则不需要反转if(head==null||head.next==null){return  head;}//需要三个变量进行控制Node<Integer> preNode =null;Node<Integer> currentNode =head;Node<Integer> nextNode = head.next;//执行反转currentNode.next = preNode;//循环反转while (nextNode!=null){//整体移动preNode =currentNode;currentNode=nextNode;nextNode=currentNode.next;//执行反转currentNode.next = preNode;if(nextNode==null){head=currentNode;}}return head;}/*** 使用递归的方式进行链表反转* @param head 旧的链表的头结点* @return 反转后的链表的头结点*/public static Node<Integer> recursiveReverseLink(Node<Integer> head){//退出机制if(head == null || head.next ==null){return head;}//分成两个部分 1.一个结点 2、后边已经反转成功的链表Node<Integer> newHead  = recursiveReverseLink(head.next);//核心的反转逻辑head.next.next=head;head.next=null;return newHead;}public static Node<Integer> headInsertReserveLink(Node<Integer> head){if(head==null||head.next==null){return head;}Node<Integer> temp = null,newHead=null;while(head!=null){temp=head;head=head.next;temp.next=newHead;newHead =temp;}return  newHead;}/*** 用来遍历打印链表的数据* @param head*/public static void print(Node<Integer> head){Node<Integer> current = head;while(current!=null){System.out.println(current.t);current=current.next;}}public static Node<Integer> buildLink(){Node<Integer>  head = new Node<>(1);Node<Integer>  node2 = new Node<>(2);Node<Integer>  node3 = new Node<>(3);Node<Integer>  node4= new Node<>(4);Node<Integer>  node5 = new Node<>(5);head.next=node2;node2.next=node3;node3.next=node4;node4.next=node5;return  head;}private  static  class  Node<T>{private T t;private Node<T> next;public Node(T t){this.t=t;}}
}

链表的反转的三种方法相关推荐

  1. 单链表实现反转的三种方法

    单链表的操作是面试中经常会遇到的问题,今天总结一下反转的几种方案: 1 ,两两对换 2, 放入数组,倒置数组 3, 递归实现 代码如下: #include<stdio.h> #includ ...

  2. C语言实现不带头结点的单链表逆置的三种方法

    C语言实现不带头结点的单链表逆置的三种方法 直接循环 头插法 递归法 END! 直接循环 图片解释 ListNode* ReverseList1(ListNode *head) {if(head == ...

  3. java字符串abc反转_JAVA字符串反转的三种方法

    方法一:使用StringBuilder import java.util.Scanner; public class StrReversal { public static void main(Str ...

  4. 实现java字符串反转的三种方法

    实现java字符串反转的三种方法 1.问题描述:将字符串String="abcdefg"实现反转变成 "gfedcba":用java语言实现. 2.解决方法: ...

  5. JAVA字符串反转的三种方法

    在键盘中输入asd,反转后得到的是:dsa,这就是字符串的反转:这其中的思路就是运用到逆向遍历的想法.先从键盘中录入字符串,然后获取字符串中的每个字符,再进行逆向的遍历,将遍历的字符放在一个新建的空字 ...

  6. python list是数组还是链表实现的_python 数据结构 list和链表实现栈的三种方法

    MAX_SIZE = 100 classMyStack1(object):"""模拟栈""" def __init__(self): sel ...

  7. 链表反转的四种方法(栈、头插法、三指针法、递归法)

    单链表反转或转置的四种方法 链表的反转实质上是反转链表上的内容: 若链表存储的数据是:1->2->3->4->5; 那么反转后则是:5->4->3->2-&g ...

  8. 在JavaScript中反转字符串的三种方法

    This article is based on Free Code Camp Basic Algorithm Scripting "Reverse a String" 本文基于F ...

  9. 链表逆置(三种方法详解)

    @Achievek 6-1 单链表逆转 (20 point(s)) 本题要求实现一个函数,将给定的单链表逆转. ##函数接口定义: List Reverse( List L ); 其中List结构定义 ...

最新文章

  1. TCP/IP 笔记 1.3 IP:网际协议
  2. 【Android】Source Insight 基本用法 ( 导入 Android 源码 | 设置字体 | 显示行号 | 搜索功能 | 快捷键设置 )
  3. c语言编程平均分,用C语言编程平均分数
  4. python3中map函数_python3中map()和reduce()函数
  5. 热成像成像不清楚是什么时候_「从零搞机」热成像仪查看 分形工艺Node 202 机箱 风道散热情况...
  6. elasticsearch in查询_Python Elasticsearch DSL 查询、过滤、聚合操作实例
  7. Elasticsearch实现原理分析
  8. 论文浅尝 | 面向开放域的无监督实体对齐
  9. thymeleaf模板引擎基础使用(转)
  10. Java生产环境下性能监控与调优详解 第5章 Tomcat性能监控与调优
  11. oracle保持会话连接,oracle中连接与会话
  12. 图像处理之调整亮度与饱和度
  13. LINUX SHELL中大小写转换及注意事项
  14. 打造风格独特的心仪简历——Word 简历整活心得
  15. 软件测试狂斩五家大厂的简历长什么样?
  16. qq远程听到计算机声音,QQ2017远程播放视频没有声音_软件应用_电脑知识学习_培训之家...
  17. [NOI2008]糖果雨
  18. Selenium自动化测试:如何使用cookie跳过验证码登录
  19. cesium 模型实体平移
  20. 机票售票系统/飞机票购票系统的设计与实现

热门文章

  1. Tomcat启动闪退的原因和解决方法
  2. java邮箱发送_java邮箱发送报错
  3. python中最小公倍数函数_Python实现的求解最小公倍数算法示例
  4. 互联网思维“独孤九剑”
  5. 攻壳机动队2:绚烂的冷酷的幻灭的
  6. 智慧园区在建设过程中存在的问题
  7. oracle char转存date,Oracle中char到Date和Number的转换
  8. Naive Bayes(朴素贝叶斯)
  9. 率土之滨宝物列表_率土之滨宝物系统改公告发布了,这些事情你得知道
  10. 阿里云从github下载数据一直失败解决办法