包含初始化、尾插创建和Locate三个函数。 输入包含二行,第一行包含2个整数n,x,n为链表元素个数;x表示想在链表中定位的元素值。第二行为相应的n个链表元素。 输出包括一行,表示x在链表中出现的顺序号(首元结点是第1个结点,如果有相同元素,输出第一个的出现位置)。
时间: 2025-06-27 14:02:09 浏览: 12
### 单链表的实现
以下是基于 Java 的单链表实现,其中包括初始化、尾插法创建以及定位节点的功能。
#### 1. 节点类定义
为了构建单链表,首先需要定义一个 `Node` 类来表示链表中的每一个节点。每个节点包含两个部分:存储数据的部分 (`data`) 和指向下一个节点的指针 (`next`)。
```java
class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
```
#### 2. 链表类定义
接下来定义一个 `LinkedList` 类,该类负责管理整个链表的操作,包括初始化、尾插法创建和查找指定元素位置等功能。
```java
public class LinkedList {
private Node head; // 表头指针
private int size; // 记录当前链表长度
// 初始化链表
public LinkedList() {
this.head = null;
this.size = 0;
}
// 尾插法创建链表
public void createByTailInsertion(int[] elements) {
if (elements == null || elements.length == 0) return;
for (int element : elements) {
append(element);
}
}
// 向链表末尾追加节点
private void append(int value) {
Node newNode = new Node(value);
if (head == null) { // 如果链表为空,则新节点成为头节点
head = newNode;
} else {
Node current = head;
while (current.next != null) { // 找到最后一个节点
current = current.next;
}
current.next = newNode; // 插入新节点
}
size++;
}
// 查找指定元素的位置
public int findPosition(int target) {
Node current = head;
int index = 0;
while (current != null) {
if (current.data == target) {
return index; // 返回目标元素所在索引
}
current = current.next;
index++;
}
return -1; // 若未找到返回-1
}
// 输出链表内容(辅助功能)
public void displayList() {
Node current = head;
System.out.print("链表内容: ");
while (current != null) {
System.out.print(current.data + " -> ");
current = current.next;
}
System.out.println("null");
}
}
```
#### 3. 测试代码
下面是一个测试程序,演示如何使用上述类及其方法:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要插入的元素数量:");
int n = scanner.nextInt();
int[] elements = new int[n];
System.out.println("请输入" + n + "个整数:");
for (int i = 0; i < n; i++) {
elements[i] = scanner.nextInt();
}
// 创建链表对象
LinkedList linkedList = new LinkedList();
// 使用尾插法创建链表
linkedList.createByTailInsertion(elements);
// 显示链表内容
linkedList.displayList();
// 查询某个元素的位置
System.out.println("请输入要查询的目标元素:");
int target = scanner.nextInt();
int position = linkedList.findPosition(target);
if (position != -1) {
System.out.println("目标元素位于第 " + position + " 位 (从0开始计数)");
} else {
System.out.println("目标元素不在链表中!");
}
scanner.close();
}
}
```
---
### 功能说明
1. **初始化**
构造函数 `LinkedList()` 完成了链表的初始化工作,设置初始状态为无任何节点。
2. **尾插法创建**
方法 `createByTailInsertion(int[] elements)` 实现了通过数组按顺序向链表尾部插入节点的过程[^2]。
3. **定位节点**
方法 `findPosition(int target)` 可以遍历链表并返回目标元素所在的索引位置。如果没有找到对应元素,则返回 `-1`[^3]。
---
### 注意事项
- 输入时需确保提供有效的数值范围,避免非法输入引发异常。
- 当前实现假设所有操作均针对整型数据;对于其他类型的扩展可进一步修改 `Node` 类及其实现逻辑。
---
阅读全文
相关推荐


















