class Node {
Node next;
String name;
public Node(String name) {
this.name = name;
}
/**
* 打印结点
*/
public void show() {
Node temp = this;
do {
System.out.print(temp + "->");
temp = temp.next;
}while(temp != null);
System.out.println();
}
/**
* 递归实现单链表反转,注意:单链表过长,会出现StackOverflowError
* @param n
* @return
*/
public static Node recursionReverse(Node n) {
long start = System.currentTimeMillis();
if(n == null || n.next == null) {
return n;
}
Node reverseNode = recursionReverse(n.next);
n.next.next = n;
n.next = null;
System.out.println("递归逆置耗时:" + (System.currentTimeMillis() - start) + "ms...");
return reverseNode;
}
/**
* 循环实现单链表反转
* @param n
* @return
*/
public static Node loopReverse(Node n) {
long start = System.currentTimeMillis();
if(n == null || n.next == null) {
return n;
}
Node pre = n;
Node cur = n.next;
Node next = null;
while(cur != null) {
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
n.next = null;
n = pre;
System.out.println("循环逆置耗时:" + (System.currentTimeMillis() - start) + "ms...");
return pre;
}
@Override
public String toString() {
return name;
}
public static void main(String[] args) {
int len = 10;
Node[] nodes = new Node[len];
for(int i = 0; i < len; i++) {
nodes[i] = new Node(i + "");
}
for(int i = 0; i < len - 1; i++) {
nodes[i].next = nodes[i+1];
}
/* try {
Thread.sleep(120000);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
Node r1 = Node.loopReverse(nodes[0]);
r1.show();
Node r = Node.recursionReverse(r1);
r.show();
}
}
引用
总结
引用
对于递归和循环,推荐使用循环实现,递归在单链表过大时,会出现StatckOverflowError,递归涉及到方法的调用,在性能上也弱于循环的实现
分享到:
相关推荐
单链表分段逆转 java 实现单链表逆转详解及实例代码
使用C++描述的单链表处理程序源代码,可以实现单链表的逆转等操作。CodeBlocks下调试通过。
单链表逆转操作,在笔试中经常可见 1实现整体逆转 2.实现相邻元素逆转
我们将通过C++语言来实现这一过程,涉及的知识点包括链表的概念、节点结构、指针操作以及循环链表的逆转算法。 首先,我们需要了解链表的基本构成。链表由一系列节点组成,每个节点包含两部分:数据域和指针域。...
总结一下,这个C++实现涵盖了单链表的基本操作:创建链表和逆转链表。对于初学者来说,理解这些概念和代码是学习数据结构和算法的基础。熟练掌握单链表的创建和操作,有助于进一步学习更复杂的数据结构,如双链表、...
一个C程序 实现了单链表的逆序 且复杂度为O n
单链表的逆转求和,根据输入,完成单链表的建立操作,然后实现单链表的逆转,输出逆转之后各几点的元素值,最后输出所有元素之和。
在本实验中,我们探讨了单链表的几个关键操作:逆转链表、在指定位置后插入新节点、删除特定节点以及查找节点。 首先,让我们深入理解单链表逆转的过程。逆转链表的算法涉及到改变每个节点的指针方向,使其从原本...
PAT 单链表分段逆转 单链表分段逆转 单链表分段逆转 单链表分段逆转 单链表分段逆转
### 单链表的基本操作与实现 #### 一、单链表的概念与结构定义 单链表是一种线性数据结构,其中每个元素都是一个独立的对象,称为节点(Node)。每个节点包含两部分:一部分用于存储数据(Data),另一部分则包含...
3_单链表的逆转.cpp
总结起来,逆转线性单链表是通过改变链表节点之间的链接关系来实现的,具体方法是通过两个指针交替更新节点的 `next` 指针,最终达到逆转的效果。这个操作在理解和掌握链表操作中具有重要意义,也是数据结构与算法...
这是一道典型的链表操作题目,要求实现一个函数`Reverse`来逆转给定的单链表。在链表中,每个节点包含数据和指向下一个节点的指针。逆转链表意味着将原来的前后关系颠倒,使原链表的最后一个节点成为新链表的第一个...
单链表逆置是一种重要的数据结构操作,通过对单链表节点的指针进行修改,可以高效地实现链表元素顺序的反转。上述代码清晰地展示了单链表的创建、遍历和逆置的过程,对于理解和掌握单链表操作具有很好的参考价值。
递归方式的实现可以使用函数调用自身的方式来实现单链表倒序算法,而迭代方式的实现可以使用循环的方式来实现单链表倒序算法。 在上面的代码中,我们使用了递归方式来实现单链表倒序算法。递归函数 `sort` 将链表中...
c++实现单链表的创建,逆转,以及找到寻找中间节点,用最小的空间找到倒数第m个节点
本主题关注的是单链表的操作,包括逆转、前驱插入和后驱插入,以及一种特殊的排序方法,特别适用于节点数据较大,避免了对数据进行拷贝的情况,从而提升了程序性能。下面我们将详细探讨这些知识点。 1. **单链表**...
"单向链表逆转" 在计算机科学中,链表是一种基本的数据结构,它是一种动态的数据结构,可以存储大量的数据。...在C++中,可以通过结构体和函数来实现链表的创建、显示和逆转。链表有很多优点,但是也有一些缺点。