题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup(ListNode head, int k) {
// write code here
ListNode pre = null;
ListNode cur = null;
ListNode next = null;
ListNode tmp = head;
int index = 0;
ListNode head1 = null;
ListNode tail = null;
boolean flag = false;
while (tmp != null) {
cur = tmp;
next = tmp.next;
if (index == 0) {
head1 = tmp;
flag = false;
} else if (index == k - 1) {
tail = tmp;
reverseKGroup1(head1, tail);
//链接外部
if (pre != null) {
pre.next = tail;
} else {
head = tail;
}
pre = head1;
flag = true;
}
tmp = next;
index = ++index % k;
}
if(!flag && pre != null){
pre.next = head1;
}
return head;
}
public void reverseKGroup1(ListNode start, ListNode end) {
ListNode s = start;
ListNode e = end;
ListNode pre = null;
ListNode cur = null;
ListNode next = null;
while (s != e) {
cur = s;
next = s.next;
cur.next = pre;
pre = cur;
s = next;
}
e.next = pre;
System.out.println();
}
}
- 循环链表节点
- 反转的时候用三个变量保存前一个节点,当前节点,后一个节点
- 处理k个循环
- 处理循环k个之后与外部的链接
- 处理最后不够k个节点
查看3道真题和解析