📅  最后修改于: 2023-12-03 15:40:53.445000             🧑  作者: Mango
单链表是一种重要的数据结构,在编写单链表程序时,反转单链表也是一个常见的操作。本文将介绍如何使用Java编写程序来反转单链表中的备用K节点。
在单链表中,备用K节点指的是从链表头节点开始数第K个节点的位置。例如,备用K节点为2,即表示从链表头节点数起的第2个节点就是备用K节点。
下面是使用Java编写的反转单链表中的备用K节点的程序代码:
public class LinkedList {
private Node head;
private static class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
public void reverseAlternateKNodes(int k) {
this.head = reverseAlternateKNodesUtil(head, k, true);
}
private Node reverseAlternateKNodesUtil(Node node, int k, boolean flag) {
if (node == null) {
return null;
}
int count = 0;
Node curr = node;
Node prev = null;
Node next = null;
while (curr != null && count < k) {
next = curr.next;
if (flag == true) {
curr.next = prev;
}
prev = curr;
curr = next;
count++;
}
if (flag == true) {
node.next = reverseAlternateKNodesUtil(next, k, !flag);
return prev;
} else {
prev.next = reverseAlternateKNodesUtil(next, k, !flag);
return node;
}
}
public void push(int data) {
Node newNode = new Node(data);
newNode.next = this.head;
this.head = newNode;
}
public void printList() {
Node node = head;
while (node != null) {
System.out.print(node.data + " ");
node = node.next;
}
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
for (int i = 20; i > 0; i--) {
list.push(i);
}
System.out.println("Original Linked list:");
list.printList();
list.reverseAlternateKNodes(2);
System.out.println("");
System.out.println("Reversed Linked list:");
list.printList();
}
}
上述程序实现了反转单链表中的备用K节点的功能。具体实现方法为,在每K个节点的位置进行一次反转。程序会先反转链表中的前K个节点,然后继续遍历链表,每遍历K个节点进行一次反转,直到链表末尾。
运行上述程序,可以得到以下输出:
Original Linked list:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Reversed Linked list:
2 1 3 4 6 5 7 8 10 9 11 12 14 13 15 16 18 17 19 20
本文介绍了如何使用Java编写程序来反转单链表中的备用K节点。通过该方法,可以方便地实现单链表中的节点反转。