题解 | #链表内指定区间反转#

链表中的节点每k个一组翻转

http://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 dummyNode = new ListNode(-1); // 设置虚拟头结点 dummyNode.next = head;

    ListNode pre = dummyNode; // pre指向待翻转链表的前一个结点
    
    // 翻转k个结点
    while (findK(pre, k)) {
        head = pre.next;
        for (int i = 1; i < k; i++) {
            ListNode next = head.next;
            head.next = next.next;
            next.next = pre.next;
            pre.next = next;
        }
        pre = head; // 翻转完k个之后,修改pre指向的结点
    }
    
    return dummyNode.next;
}
// 查看是否还剩下k个结点
public boolean findK(ListNode pre, int k) {
    for (int i = 0; i < k; i++) {
        pre = pre.next;
        if (pre == null) {
            return false;
        }
    }
    return true;
}

}

全部评论

相关推荐

点赞 评论 收藏
分享
04-15 23:42
中山大学 Java
ResourceUtilization:过几天楼主就会捧着一堆offer来问牛友们该怎么选辣
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务