Java函数如何实现链表反转功能
发布时间:2023-06-15 13:15:53
链表是一种常见的数据结构,在Java中可以通过创建链表类来实现。链表反转是指将链表中的节点顺序颠倒,使得原本在前面的节点变为后面的节点,原本在后面的节点变为前面的节点。在这篇文章中,我们将探讨如何在Java中实现链表反转功能。
首先,我们需要定义一个链表类,用来存储链表中的节点。链表节点通常由两个部分组成,一部分是存储数据的属性,另一部分是指向下一个节点的指针。我们可以通过创建一个Node类来表示这个节点:
public class Node {
int data; // 存储数据属性
Node next; // 指向下一个节点的指针
}
接下来,我们需要实现链表反转的功能。有多种方法可以实现链表反转,我们在这里介绍其中一种——迭代法。迭代法的思路是从头节点开始,依次将每个节点的指针指向前一个节点,直到到达最后一个节点。
具体实现过程如下:
1. 定义三个指针prev、curr和next,分别表示当前节点的前一个节点、当前节点和下一个节点,初始时prev和next均为null,curr指向链表的头节点。
Node prev = null; Node curr = head; Node next = null;
2. 循环遍历链表,依次将每个节点的指针指向前一个节点,直到当前节点为null。
while (curr != null) {
next = curr.next; // 保存下一个节点
curr.next = prev; // 将当前节点指向前一个节点
prev = curr; // 前一个节点指针后移
curr = next; // 当前节点指针后移
}
3. 反转完成后,需要将链表的头节点指向原本的尾节点,即变为prev指向的节点。
head = prev;
完整的代码如下:
public class LinkedList {
Node head;
// 将链表反转
public void reverse() {
Node prev = null;
Node curr = head;
Node next = null;
while (curr != null) {
next = curr.next; // 保存下一个节点
curr.next = prev; // 将当前节点指向前一个节点
prev = curr; // 前一个节点指针后移
curr = next; // 当前节点指针后移
}
head = prev;
}
// 添加节点
public void addNode(int data) {
Node newNode = new Node();
newNode.data = data;
newNode.next = null;
if (head == null) {
head = newNode;
} else {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = newNode;
}
}
// 输出链表元素
public void printList() {
Node temp = head;
while (temp != null) {
System.out.print(temp.data + " ");
temp = temp.next;
}
System.out.println();
}
// 测试用例
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.addNode(1);
list.addNode(2);
list.addNode(3);
list.addNode(4);
System.out.println("Original list:");
list.printList();
list.reverse();
System.out.println("Reversed list:");
list.printList();
}
}
在上面的代码中,我们首先创建一个含有四个节点的链表,然后输出原本的链表元素顺序,接着调用reverse()方法将链表反转,最后输出反转后的链表元素顺序。运行结果如下:
Original list: 1 2 3 4 Reversed list: 4 3 2 1
可以看出,链表的反转功能已经被成功实现了。
