当前位置:实例文章 » JAVA Web实例» [文章]Java实现单链表,反转链表,检测是否成环

Java实现单链表,反转链表,检测是否成环

发布人:shili8 发布时间:2025-01-05 07:52 阅读次数:0

**Java 实现单链表**

### 链表定义

javapublic class Node {
 int data;
 Node next;

 public Node(int data) {
 this.data = data;
 this.next = null;
 }
}


### 链表类
javapublic class LinkedList {
 private Node head;

 public void addNode(int data) {
 Node newNode = new Node(data);
 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();
 }
}


### 反转链表
javapublic class LinkedList {
 // ...

 public void reverseList() {
 Node prev = null;
 Node current = head;
 while (current != null) {
 Node nextNode = current.next;
 current.next = prev;
 prev = current;
 current = nextNode;
 }
 head = prev;
 }

 public void printReverseList() {
 reverseList();
 Node temp = head;
 while (temp != null) {
 System.out.print(temp.data + " ");
 temp = temp.next;
 }
 System.out.println();
 // 回复链表 reverseList();
 }
}


### 检测是否成环
javapublic class LinkedList {
 // ...

 public boolean hasCycle() {
 Node slow = head;
 Node fast = head;
 while (fast != null && fast.next != null) {
 slow = slow.next;
 fast = fast.next.next;
 if (slow == fast) {
 return true;
 }
 }
 return false;
 }

 public void printCycle() {
 if (!hasCycle()) {
 System.out.println("No cycle found.");
 return;
 }
 Node slow = head;
 Node fast = head;
 while (fast != null && fast.next != null) {
 slow = slow.next;
 fast = fast.next.next;
 if (slow == fast) {
 break;
 }
 }
 System.out.println("Cycle detected at node " + slow.data);
 }
}


### 示例代码
javapublic class Main {
 public static void main(String[] args) {
 LinkedList list = new LinkedList();
 list.addNode(1);
 list.addNode(2);
 list.addNode(3);
 list.addNode(4);
 list.addNode(5);

 System.out.println("Original List:");
 list.printList();

 System.out.println("Reversed List:");
 list.reverseList();
 list.printList();

 System.out.println("Has Cycle: " + list.hasCycle());

 System.out.println("Print Cycle:");
 list.printCycle();
 }
}


###代码注释* `Node`类定义了链表中的一个节点,包含数据和指向下一个节点的引用。
* `LinkedList`类定义了链表本身,提供添加、打印和反转链表的方法。
* `reverseList()`方法通过将每个节点的next指针指向前一个节点来实现链表的反转。
* `hasCycle()`方法使用快慢指针法检测链表是否成环。
* `printReverseList()`方法先反转链表,然后打印反转后的链表,最后回复链表。
* `printCycle()`方法如果链表有环,则打印环的起始节点。

以上是Java实现单链表、反转链表和检测是否成环的代码示例。

相关标签:java开发语言
其他信息

其他资源

Top