节点类:
//节点类
class Node{
public Node(int value){
this.value = value;
}
public Node(){
}
int value;
Node next;
}
初始化链表
//初始化一个有序的单链表
public Node initList(){
Node head = new Node();
Node n1 = new Node();
Node n2 = new Node();
Node n3 = new Node();
Node n4 = new Node();
Node n5 = new Node();
n1.value = 1;
n2.value = 2;
n3.value = 3;
n4.value = 4;
n5.value = 5;
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
head.next = n1;
return head;
}
非递归的逆转
//单链表逆转,非递归
public Node reverseList(Node node){
if (null == node) {
return node;
}
//上一个节点
Node upper = null;
//当前节点
Node cur = node.next;
//下一个节点
Node next = null;
while (null != cur) {
next = cur.next;
cur.next = upper;
upper = cur;
cur = next;
}
//反转结束后,upper引用指向原链表的最后一个节点,即反转后的第一个节点
node = upper;
return node;
}
递归的逆转
public Node reverse(Node node){
if(node==null || node.next == null)return node;
Node next = node.next;
//将node的next清空,否则在递归return到最上层时要逆转的原链表的最后一个节点的next会指向原来的头节点,而原来的头节点的next又指向原来的第一个节点,即逆转后的最后一个节点,会造成无限的重复链表
node.next = null;
Node returnNode = reverse2(next);
next.next = node;
return returnNode;
}
打印链表:
//打印单链表
public void printList(Node head){
String str = "";
for(Node n = head;n!=null;){
str = str + " " + n.value;
n = n.next;
}
System.out.println(str);
}
调用:
Test t = new Test();
Node head = t.initList();
System.out.println("逆转前:");
t.printList(head.next);
System.out.println("逆转后:");
t.printList(t.reverseList(head));
分享到:
相关推荐
单链表分段逆转 java 实现单链表逆转详解及实例代码
PAT 单链表分段逆转 单链表分段逆转 单链表分段逆转 单链表分段逆转 单链表分段逆转
本主题将深入探讨如何在C++中创建单链表以及如何逆转单链表。 首先,我们来看一下如何创建一个单链表。在C++中,我们可以定义一个结构体或类来表示链表节点,通常包含两个部分:数据域(用于存储数据)和指针域...
在计算机科学中,逆转线性单链表是一种常见的操作,它能改变链表中节点的顺序,使得原本的尾部节点变为头部,而原来的头部节点变为尾部。这个过程对于理解和实现链表操作非常有帮助。 在给定的代码中,我们看到一个...
单链表的逆转求和,根据输入,完成单链表的建立操作,然后实现单链表的逆转,输出逆转之后各几点的元素值,最后输出所有元素之和。
使用C++描述的单链表处理程序源代码,可以实现单链表的逆转等操作。CodeBlocks下调试通过。
单链表逆转操作,在笔试中经常可见 1实现整体逆转 2.实现相邻元素逆转
在实际操作中,你可以创建一个循环单链表,插入一些节点,然后调用`reverse()`方法逆转链表,最后打印出逆转前后的链表,以验证逆转操作的正确性。 这个实验涵盖了链表数据结构、模板编程、动态内存管理和指针操作...
在本实验中,我们探讨了单链表的几个关键操作:逆转链表、在指定位置后插入新节点、删除特定节点以及查找节点。 首先,让我们深入理解单链表逆转的过程。逆转链表的算法涉及到改变每个节点的指针方向,使其从原本...
一个C程序 实现了单链表的逆序 且复杂度为O n
3_单链表的逆转.cpp
### 单链表的基本操作与实现 #### 一、单链表的概念与结构定义 单链表是一种线性数据结构,其中每个元素都是一个独立的对象,称为节点(Node)。每个节点包含两部分:一部分用于存储数据(Data),另一部分则包含...
### 单链表逆置知识点解析 #### 一、单链表基础概念 单链表是一种常见的线性数据结构,其特点是每个元素包含一个指向下一个元素的指针。这种结构使得在链表中插入和删除元素变得非常方便,因为只需要改变相关节点...
包括单链表的输入,输出和逆转后的输出。编译通过。
本主题关注的是单链表的操作,包括逆转、前驱插入和后驱插入,以及一种特殊的排序方法,特别适用于节点数据较大,避免了对数据进行拷贝的情况,从而提升了程序性能。下面我们将详细探讨这些知识点。 1. **单链表**...
c++实现单链表的创建,逆转,以及找到寻找中间节点,用最小的空间找到倒数第m个节点
"单向链表逆转" 在计算机科学中,链表是一种基本的数据结构,它是一种动态的数据结构,可以存储大量的数据。单向链表是一种特殊的链表,每个结点只有一个指针,指向下一个结点。单向链表逆转是指将链表的结点顺序...