java不用api实现单链表反转(二)
2016-02-27 19:11
393 查看
这篇博客主要讲述反转链表相关思路。两种方法:时间复杂度均为O(n),空间复杂度均为O(1)
方法一:头插法
头插法不仅可以创建单链表,还可以利用其思路反转链表。首先把头节点拆下,剩下的节点依次遍历,采用头插法,相当于从新建立链表。
方法二:正常思维
该方法就是遍历到某个节点时,将其指向先前的节点,不断遍历知道其为空。要注意的是除头节点外第一个节点指针为空(变为最后一个节点了嘛),要先处理它。然后遍历完毕后要将头节点指针指向最后一个节点。(需要三个指针)
完整代码单击此处
方法一:头插法
头插法不仅可以创建单链表,还可以利用其思路反转链表。首先把头节点拆下,剩下的节点依次遍历,采用头插法,相当于从新建立链表。
package singleLinklistReverse; import singleLinklistReverse.Creat.Lnode; public class Reverse { Lnode p; Lnode r; public void reverseLinklist(Lnode first) { // TODO Auto-generated method stub p=first.next; while(p!=null){ System.out.println(p.data); p=p.next; } p=first.next; first.next=null; while(p!=null){ r=p.next; p.next=first.next; first.next=p; p=r; } p=first.next; while(p!=null){ System.out.println(p.data); p=p.next; } } } 结果: 12345 5 4 3 2 1 1 2 3 4 5 输入12345,采用头插法建立单链表,54321是当前链表里的数据;12345是反转之后的数据。
方法二:正常思维
该方法就是遍历到某个节点时,将其指向先前的节点,不断遍历知道其为空。要注意的是除头节点外第一个节点指针为空(变为最后一个节点了嘛),要先处理它。然后遍历完毕后要将头节点指针指向最后一个节点。(需要三个指针)
/** * */ /** * @author Administrator * */ package singleLinklistReverse_2; import singleLinklistReverse_2.Creat.Lnode; public class Reverse_2{ Lnode p,pre,r; public void reverseLinklist(Lnode first) { // TODO Auto-generated method stub p=first.next; while(p!=null){ System.out.println(p.data); p=p.next; } p=first.next;//处理第一个节点 r=p.next; p.next=null; pre=first.next; while(r!=null){ p=r; r=r.next; p.next=pre; pre=p; } first.next=p; p=first.next; while(p!=null){ System.out.println(p.data); p=p.next; } } } 结果: 12345 1 2 3 4 5 5 4 3 2 1 输入12345,采用尾插法建立单链表,当前链表里数据为12345,反转后数据为54321
完整代码单击此处
相关文章推荐
- 最大优先序列的java实现
- JAVA同时查看一个类的继承关系(Eclipse快键)
- java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
- java的反射机制
- Java基础(移位,函数)
- eclipse常用操作技巧
- Java如何获取文件编码格式
- mac 安装maven 和改动java环境变量
- java 乱码问题-Dfile.encoding=UTF-8
- Java动态加载jar文件
- java中基本输入输出流的解释
- Java异常机制
- Java设计模式--策略模式
- java设计模式(四)--单例模式
- spring学习笔记 - 面试题
- java 用嵌套for循环实现九九乘法表各种形状的展现
- Hello World!(Error opening registry key'software\Javasoft\Java Runtime Environment')
- java排序之插入排序(直接插入排序和希尔排序)
- 个人学习-java-单例设计模式
- android eclipse 将项目中assets文件夹下的数据库文件存储到data/data/包名/databases下