【LeetCode】25. Reverse Nodes in k-Group - Java实现

1. 题目描述:

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

Example:

Given this linked list: 1->2->3->4->5

For k = 2, you should return: 2->1->4->3->5

For k = 3, you should return: 3->2->1->4->5

Note:

  • Only constant extra memory is allowed.
  • You may not alter the values in the list’s nodes, only nodes itself may be changed.

2. 思路分析:

题目的意思是将一个链表按照顺序每k个进行翻转。

此题可以新建一个方法用于翻转含有k个节点的链表区间。然后在主方法中遍历整个列表,用一个计数器表示遍历的节点数,当达到k个时调用一下新建的那个方法对这k个节点进行翻转,然后将计数器清为0,继续遍历,以此类推。

3. Java代码:

源代码见我GiHub主页

代码:

public static ListNode reverseKGroup(ListNode head, int k) {
    // 构建一个头结点,方便连接最后结果
    ListNode dummy = new ListNode(-1);
    dummy.next = head;
    // 指向翻转区间第一个节点的前一个节点
    ListNode pre = dummy;
    // 指向翻转区间的第一个节点
    ListNode first = pre.next;
    // 用于遍历的当前节点指针
    ListNode cur = first;
    int cnt = 0;
    while (cur != null) {
        cnt++;
        if (cnt == k) {
            ListNode last = cur;
            pre.next = reverseOneGroup(first, last);
            // 注意此处的first节点已经是翻转后的最后一个节点了
            pre = first;
            first = pre.next;
            cur = first;
            cnt = 0;
        } else {
            cur = cur.next;
        }
    }
    return dummy.next;
}

/**
 * 用于翻转一个区间内的链表
 */
private static ListNode reverseOneGroup(ListNode first, ListNode last) {
    while (first != last) {
        ListNode cur = first;
        first = first.next;
        cur.next = last.next;
        // last节点作为翻转后的第一个节点
        last.next = cur;
    }
    return last;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值