📌  相关文章
📜  用于反转单链表中的备用 K 节点的Java程序(1)

📅  最后修改于: 2023-12-03 15:40:53.445000             🧑  作者: Mango

反转单链表中的备用 K 节点的Java程序介绍

单链表是一种重要的数据结构,在编写单链表程序时,反转单链表也是一个常见的操作。本文将介绍如何使用Java编写程序来反转单链表中的备用K节点。

什么是备用K节点?

在单链表中,备用K节点指的是从链表头节点开始数第K个节点的位置。例如,备用K节点为2,即表示从链表头节点数起的第2个节点就是备用K节点。

反转单链表中的备用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节点。通过该方法,可以方便地实现单链表中的节点反转。