知识点
链表,反转链表
解题思路
大致的思路是找出链表的总节点数n,分为n/k个模块分别将链表倒转。
具体做法:定义一个ans虚拟节点next指向head,pre节点等于ans,curr等于head。
在循环中next为curr的下一个节点,curr的next指向next.next,next.next指向pre.next。pre的next指向next。
在循环外pre等于curr,curr下一一位。画个k=3的草图就是这样。
Java题解
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
// write code here
ListNode ans = new ListNode(0);
ans.next = head; //构建一个新节点
int n = 0; //结点的总数
ListNode curr = head;
while(head != null){
head = head.next;
n++;
}
ListNode pre = ans; //循环中的前置结点
for(int i = 0; i < n/k; i++){ //分模块倒转链表
for(int l = 1; l < k; l++){ //一个模块中的链表
ListNode next = curr.next;
curr.next = next.next; //必然不会报空指针,因为k=1不会走到这儿
next.next = pre.next; //倒转
pre.next = next;
}
pre = curr;
curr = curr.next;
}
return ans.next;
}
}



京公网安备 11010502036488号