25. K 个一组翻转链表
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了25. K 个一组翻转链表相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
说明
一、题目
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
二、分析
- 和翻转给定区间的链表方法差不多,只需要依次遍历整条链表上的
K
个节点,然后将这段区间内的链表进行反转返回。 - 直至链表结束或者剩余节点数已经不满足需要反转的数量为止。
/**
* 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 reverse(ListNode head, ListNode tail) {
while(head != tail) {
ListNode temp = head;
head = head.next;
temp.next = tail.next;
tail.next = temp;
}
return head;
}
public ListNode reverseKGroup(ListNode head, int k) {
ListNode hair = new ListNode(-1, head);
ListNode mi = hair;
ListNode pre = head, tail = null;
while(pre != null) {
tail = pre;
for(int i = 0; i < k - 1; i++) {
tail = tail.next;
if(tail == null) return hair.next;
}
pre = reverse(pre, tail);
mi.next = pre;
for(int i = 0; i < k; i++) {
pre = pre.next;
mi = mi.next;
}
}
return hair.next;
}
}
总结
熟悉链表的反转。
以上是关于25. K 个一组翻转链表的主要内容,如果未能解决你的问题,请参考以下文章