如何实现每25个节点为一组翻转链表?

更新于
2026-10-11 06:58:15
1阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计708个文字,预计阅读时间需要3分钟。

如何实现每25个节点为一组翻转链表?

给您的链表的头部节点 +head+,每+k+个节点进行一次循环,请返回修改后的链表。

+k+ 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是+k+的整数倍,那么请将最后剩余的节点连接到链表的末尾。

例如,如果链表为:1 -> 2 -> 3 -> 4 -> 5 -> 6,k=3,则修改后的链表为:1 -> 2 -> 3 -> 4 -> 5 -> 6。

如果链表为:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7,k=3,则修改后的链表为:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。

如何实现每25个节点为一组翻转链表?

给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。

k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:

输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5]

示例 2:

输入:head = [1,2,3,4,5], k = 3 输出:[3,2,1,4,5]

提示:

  • 链表中的节点数目为n
  • 1 <= k <= n <= 5000
  • 0 <= Node.val <= 1000

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode dummy = new ListNode(0); dummy.next = head; ListNode pre = dummy; ListNode end = dummy; while (end.next != null) { for (int i = 0; i < k && end != null; i++) end = end.next; if (end == null) break; ListNode start = pre.next; ListNode next = end.next; end.next = null; pre.next = reverse(start); start.next = next; pre = start; end = pre; } return dummy.next; } private ListNode reverse(ListNode head) { ListNode pre = null; ListNode curr = head; while (curr != null) { ListNode next = curr.next; curr.next = pre; pre = curr; curr = next; } return pre; } }


标签:头节点

本文共计708个文字,预计阅读时间需要3分钟。

如何实现每25个节点为一组翻转链表?

给您的链表的头部节点 +head+,每+k+个节点进行一次循环,请返回修改后的链表。

+k+ 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是+k+的整数倍,那么请将最后剩余的节点连接到链表的末尾。

例如,如果链表为:1 -> 2 -> 3 -> 4 -> 5 -> 6,k=3,则修改后的链表为:1 -> 2 -> 3 -> 4 -> 5 -> 6。

如果链表为:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7,k=3,则修改后的链表为:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。

如何实现每25个节点为一组翻转链表?

给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。

k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:

输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5]

示例 2:

输入:head = [1,2,3,4,5], k = 3 输出:[3,2,1,4,5]

提示:

  • 链表中的节点数目为n
  • 1 <= k <= n <= 5000
  • 0 <= Node.val <= 1000

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode dummy = new ListNode(0); dummy.next = head; ListNode pre = dummy; ListNode end = dummy; while (end.next != null) { for (int i = 0; i < k && end != null; i++) end = end.next; if (end == null) break; ListNode start = pre.next; ListNode next = end.next; end.next = null; pre.next = reverse(start); start.next = next; pre = start; end = pre; } return dummy.next; } private ListNode reverse(ListNode head) { ListNode pre = null; ListNode curr = head; while (curr != null) { ListNode next = curr.next; curr.next = pre; pre = curr; curr = next; } return pre; } }


标签:头节点