Java 链表反转:实现 k 个节点一组反转链表
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 的类,其中包含两个方法:
reverseList(ListNode head, int k):该方法接受链表的头节点和整数k作为参数,返回每k个节点反转后的链表。buildLinkedList(int[] arr):该方法接受一个整数数组作为参数,返回一个由该数组元素组成的链表。
在 main 方法中,我们创建了一个 CountDown 对象,并调用 buildLinkedList 方法创建了一个链表。然后,我们调用 reverseList 方法将链表每 2 个节点反转,最后打印反转后的链表。
该代码使用了快慢指针的技巧来实现链表的反转,效率较高。
使用方法:
- 将代码复制到您的 Java 项目中。
- 运行
main方法,即可看到反转后的链表结果。
注意:
- 该代码仅实现了链表每
k个节点反转的功能,对于其他链表操作,例如插入、删除等,需要进行额外代码编写。 - 该代码假设输入的
k值为正整数。如果输入的k值为负数或 0,则代码可能无法正常运行。 - 该代码假设输入的数组长度大于 0。如果输入的数组长度为 0,则代码可能无法正常运行。
- 该代码假设输入的数组中所有元素都是整数。如果输入的数组中包含其他类型的数据,则代码可能无法正常运行。
如果您有任何问题,请随时提出!
原文地址: https://www.cveoy.top/t/topic/pYyx 著作权归作者所有。请勿转载和采集!