=============Node.java==================
import java.util.Random;
/**
* 单个节点
* @version 1.0
* @author 点子二木
* @date 2008-7-22
* @right Copyright (C), 2008
*/
public class Node {
public int value = 0;
public Node next = null;
public Node(int value) {
this.value = value;
}
public Node(int value, Object obj) {
this.value = value;
Random r = new Random();
int nextValue = r.nextInt(100);
this.next = new Node(nextValue);
}
}
================NodeLink.java========================
import java.util.Random;
/**
* 链表
* @version 1.0
* @author 点子二木
* @date 2008-7-22
* @right Copyright (C), 2008
*/
public class NodeLink {
private static final int NUM_RANDOM = 10;
Node nodes[] = null;
// ////////////////构造方法//////////////////////
public NodeLink(Node[] nodes) {
this.nodes = nodes;
}
// /////////////主方法/////////////////////
/**
* 将链表倒序
*
* @return
*/
private Node[] Reverse() {
Node nodesRev[] = null;
nodesRev = new Node[this.nodes.length];
for (int i = 0; i < this.nodes.length; i++) {
nodesRev[this.nodes.length - i - 1] = this.nodes[i];
if (i >= 1) {
nodesRev[this.nodes.length - i - 1].next = this.nodes[i - 1];
} else if (i == 0) {
nodesRev[nodes.length-1].next = this.nodes[nodes.length-1].next;
}
}
return nodesRev;
}
/**
* 打印链表
*
* @param nodes
*/
private static void printLink(Node[] nodes) {
boolean isNull = false;
if (!isNull) {
for (int i = 0; i < nodes.length; i++) {
if (nodes[i].next != null) {
System.out.println(" nodes[" + Integer.toString(i)
+ "]:value=" + nodes[i].value + "; next="
+ nodes[i].next.value);
}
}
} else {
System.out.println("无子节点");
}
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("============Reverse NodeLink test================");
// 利用随机函数定义一定数量的链表的值,由此创建的Point类实例存入一个数组中
Node nodeArray[] = new Node[NUM_RANDOM];
Random r = new Random();
int value = 0;
value = r.nextInt(100);
nodeArray[0] = new Node(value, null);
for (int i = 1; i < nodeArray.length; i++) {
value = nodeArray[i - 1].next.value;
nodeArray[i] = new Node(value, null);
}
System.out.println("Original List:");
NodeLink.printLink(nodeArray);
Node nodesRev[] = null;
NodeLink nodeLink = new NodeLink(nodeArray);
// 编程实现根据一个已存在的链表创建一个倒序链表。
System.out.println("Reverse it:");
nodesRev = nodeLink.Reverse();
NodeLink.printLink(nodesRev);
}
}
输出结果:
============Reverse NodeLink test================
Original List:
nodes[0]:value=68; next=83
nodes[1]:value=83; next=70
nodes[2]:value=70; next=8
nodes[3]:value=8; next=41
nodes[4]:value=41; next=49
nodes[5]:value=49; next=92
nodes[6]:value=92; next=93
nodes[7]:value=93; next=11
nodes[8]:value=11; next=23
nodes[9]:value=23; next=3
Reverse it:
nodes[0]:value=23; next=11
nodes[1]:value=11; next=93
nodes[2]:value=93; next=92
nodes[3]:value=92; next=49
nodes[4]:value=49; next=41
nodes[5]:value=41; next=8
nodes[6]:value=8; next=70
nodes[7]:value=70; next=83
nodes[8]:value=83; next=68
nodes[9]:value=68; next=3
分享到:
相关推荐
### Java实现倒序链表 在本篇文章中,我们将探讨如何使用Java来实现一个倒序链表的功能。链表作为一种常见的数据结构,在计算机科学中有着广泛的应用,而倒序链表则是链表操作中的一项基本技能,对于理解链表的工作...
Java面试编程题(数组和链表相关) 本资源主要讲解了Java面试编程题中的数组和链表相关知识点,涵盖了Java编程语言中数组和链表的基本概念、算法和数据结构等方面的知识。 一、数组相关知识点 1. 、二维数组的...
Java 逆序打印链表 Java 逆序打印链表是一种常见的面试题,主要考察候选人的编程能力和数据结构知识。本文将详细介绍如何使用 Java 逆序打印链表,并提供了两种不同的实现方法。 链表的基本概念 在了解链表逆序...
4. 将一个链表倒序。 这是一个典型的链表操作问题,需要使用递归或迭代算法来解决。我们可以使用递归算法来倒序链表,或者使用迭代算法来实现链表的倒序。 5. 编程实现一个双向链表的删除过程。 这是一个典型的...
链表的倒序输出 链表的中间节点 链表是否有环 链表节点的删除(不知道头结点的情况下) 链表是否相交 链表的交点 栈(顺序栈/链式栈)的数据结构及其相关算法:栈结构包含两个要素,即栈顶指针top和栈大小size,具体操作...
5. 链表的操作:文档中介绍了如何根据现有的链表创建一个倒序链表。这部分内容涉及到链表节点的遍历和反转操作,是数据结构中链表部分的基础知识点。 6. 输入输出处理:示例程序中使用了BufferedReader和...
它采用倒序链表结构存储序列,以便快速查找和更新。算法主要包含两个阶段:初始化和递归挖掘。 1. 初始化:首先,算法对所有序列进行预处理,构建一个项集的前缀树。每个节点代表一个项,边表示项的顺序关系。 2. ...
### Java高级工程师面试总结 #### Java基础 - **Hashtable和HashMap的区别**: - `Hashtable`是线程安全的,而`HashMap`不是。这意味着在多线程环境中使用`Hashtable`时无需额外的同步措施,但这也使得其性能较低...
这些题目涵盖了广泛的Java和计算机科学基础,主要涉及算法设计、数据结构、字符串处理、内存管理以及逻辑思维。以下是对部分题目的详细解析: 1. **两两之差绝对值最小的值**:这是一个关于数组处理的问题,可以...
4. **倒序遍历**:通过反向遍历链表,可以轻松实现元素的逆序输出。 5. **合并链表**:使用`addAll()`方法可以将一个链表的所有元素添加到另一个链表中,实现链表的合并。 ### 性能分析 - **时间复杂度**:插入和...
链表不同于数组,其元素不连续存储在内存中,而是通过指针(在C/C++中)或引用(在Java或Python中)相互连接。本篇文章将深入探讨链表的创建与遍历算法。 ### 一、链表的基本概念 1. **节点(Node)**: 链表中的每...
在Java中,可以通过倒序遍历,找到第一个小于其后元素的数字,然后在其后找到最小的比它大的数字,交换这两个数字,最后对整个序列进行逆序。 6. **36. 只出现一次的数字**:这道题要求找出数组中唯一出现一次的...
- **链表倒序输出**:不能改变链表结构,可以迭代或递归实现,每次取出头部元素并连接到结果链表尾部。 5. **编程工具** - **vim替换语句**:例如,使用`:s/abc/def/g`命令全局替换字符串。 6. **PHP字符串处理...
- `LinkedList`基于链表实现,增删速度快,但查询速度慢,同样是非线程安全。 - `Set`接口包含不包含重复元素的集合,`HashSet`和`TreeSet`是其常见实现: - `HashSet`使用哈希表存储元素,通过`hashCode()`和`...
- **链表倒序输出**:利用头尾交换思想,不改变链表结构,且不使用额外空间。 5. **编程工具**: - **vim替换语句**:vim编辑器提供了强大的文本替换功能,如`:s/abc:def/g`可将所有abc替换为def。 - **调试原理...
- **定义**:扩展了SortedSet接口,提供了导航方法来定位和检索元素,支持正序和倒序访问。 - **特点**: - 支持对给定目标查找最匹配的结果。 - 可以在升序或降序的方式下被访问和移动。 - 被设计用于替代...
5. **数据结构与算法**:为了高效地管理数据,系统可能使用了数组、链表或集合框架(如ArrayList、HashMap等)来存储用户、商品和购物车信息。例如,使用HashMap可以快速根据用户名查找用户信息,使用ArrayList则...
在Java集合框架中,`LinkedList`类是一种基于链表实现的线性数据结构,继承自`AbstractSequentialList`抽象类,并实现了`List`接口与`Deque`接口。由于其内部是通过双向链表来存储元素,因此在元素的增删操作上具有...
此题要求检查单链表是否中心对称,即倒序后链表的前半部分与后半部分相同。以下是一种基于栈的解决方案: 1. 将链表的前半部分元素入栈。 2. 遍历链表的后半部分,每次取出栈顶元素与当前链表节点比较,直到栈为空...