LeetCode 25. K 个一组翻转链表
题目描述
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
// 统计链表长度
int length = 0;
ListNode cur = head;
while (cur != null) {
length++;
cur = cur.next;
}
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode preGroupEnd = dummy;
while (length >= k) {
cur = preGroupEnd.next;
// 记录本组翻转后的尾节点
ListNode nextGroupStart = cur;
ListNode pre = null;
for (int i = 0; i < k; i++) {
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
// 连接:上一组末尾 -> 本组新头
preGroupEnd.next = pre;
// 连接:本组新尾 -> 下一组起点
nextGroupStart.next = cur;
preGroupEnd = nextGroupStart;
length -= k;
}
return dummy.next;
}
}
func reverseKGroup(head *ListNode, k int) *ListNode {
// 统计链表长度
length := 0
cur := head
for cur != nil {
length++
cur = cur.Next
}
dummy := &ListNode{Next: head}
preGroupEnd := dummy
for length >= k {
cur = preGroupEnd.Next
// 记录本组翻转后的尾节点
nextGroupStart := cur
var pre *ListNode
for i := 0; i < k; i++ {
next := cur.Next
cur.Next = pre
pre = cur
cur = next
}
// 连接:上一组末尾 -> 本组新头
preGroupEnd.Next = pre
// 连接:本组新尾 -> 下一组起点
nextGroupStart.Next = cur
preGroupEnd = nextGroupStart
length -= k
}
return dummy.Next
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 24. 两两交换链表中的节点 | 中等 | 链表分组操作(k=2 特例) |
| 1721. 交换链表中的节点 | 中等 | 链表双指针 |
| 2074. 反转偶数长度组的节点 | 中等 | 链表分组反转 |
| 206. 反转链表 | 简单 | 链表反转基础 |
| 92. 反转链表 II | 中等 | 区间链表反转 |
| 143. 重排链表 | 中等 | 链表拆分+反转+合并 |
| 234. 回文链表 | 简单 | 链表反转后比较 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!

