public class CountDown {
    public class ListNode {
        int val;
        ListNode next;
        public ListNode(int x) {
            x = val;
        }
    }

    public ListNode reverseList(ListNode head, int k) {
        ListNode front = head, behind = head; // 定义快慢指针,此时都指向头节点
        while (front != null && k > 0) { // 判断链表不为空,并且k的值得为正数
            front = front.next; // 只要链表不为空并且k>0,front就一直往下走
            k--; // front走一步k-1
        }
        while (front != null) {
            front = front.next;
            behind = behind.next;
        }
        return behind;
    }

    public ListNode buildLinkedList(int[] arr) {
        ListNode dummy = new ListNode(0); // 创建一个虚拟头结点,值为0,作为链表的起始点。
        ListNode curr = dummy; // 创建一个指针curr,指向当前节点,初始时指向虚拟头结点。
        for (int nums : arr) {
            curr.next = new ListNode(nums);
            curr = curr.next;
        }
        return dummy.next;
    }

    public static void main(String[] args) {
        CountDown countDown = new CountDown();
        
        int[] arr = {1, 2, 3, 4, 5};
        ListNode head = countDown.buildLinkedList(arr);
        
        int k = 2;
        ListNode result = countDown.reverseList(head, k);
        
        System.out.print("Result: ");
        while (result != null) {
            System.out.print(result.val + " ");
            result = result.next;
        }
    }
}

该代码实现了一个名为 CountDown 的类,其中包含两个方法:

  1. reverseList(ListNode head, int k):该方法接受链表的头节点和整数 k 作为参数,返回每 k 个节点反转后的链表。
  2. buildLinkedList(int[] arr):该方法接受一个整数数组作为参数,返回一个由该数组元素组成的链表。

main 方法中,我们创建了一个 CountDown 对象,并调用 buildLinkedList 方法创建了一个链表。然后,我们调用 reverseList 方法将链表每 2 个节点反转,最后打印反转后的链表。

该代码使用了快慢指针的技巧来实现链表的反转,效率较高。

使用方法:

  1. 将代码复制到您的 Java 项目中。
  2. 运行 main 方法,即可看到反转后的链表结果。

注意:

  • 该代码仅实现了链表每 k 个节点反转的功能,对于其他链表操作,例如插入、删除等,需要进行额外代码编写。
  • 该代码假设输入的 k 值为正整数。如果输入的 k 值为负数或 0,则代码可能无法正常运行。
  • 该代码假设输入的数组长度大于 0。如果输入的数组长度为 0,则代码可能无法正常运行。
  • 该代码假设输入的数组中所有元素都是整数。如果输入的数组中包含其他类型的数据,则代码可能无法正常运行。

如果您有任何问题,请随时提出!

Java 链表反转:实现 k 个节点一组反转链表

原文地址: https://www.cveoy.top/t/topic/pYyx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录