Leetcode 25. Reverse Nodes in k-Group

题目描述:就是在前一题翻转2个链表节点的题目上变成翻转k个位置。

题目链接:Leetcode 25. Reverse Nodes in k-Group

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

代码如下

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        if (head == null && k == 0){
            return head;
        }
        
        ListNode p = head;
        ListNode ans = new ListNode(0);
        ListNode nl = ans;
        while(p != null){
            int cnt = 0;
            ListNode newHead = null;    
            while(cnt < k && p != null){
                ListNode tmpn = p.next;  //翻转链表 必存节点
                p.next = newHead;
                newHead = p; // 翻转链表了 当cnt == k的时候就翻转成功了
                p = tmpn;  //移动 k次之后 是需要翻转的下一个结点
                cnt++;
            }
            if (cnt == k){
                nl.next = newHead;
                while(nl.next != null){
                    nl = nl.next;  // 最终又回到这个点
                }
            }else{
                    // 记录的时候已经改变了位置 所以直接翻转newHead结果就好了
                    ListNode nn = null;  //新头节点
                    while(newHead != null){
                        ListNode tt = newHead.next;
                        newHead.next = nn;
                        nn = newHead;
                        newHead = tt;  // 不断下移翻转
                    }
                    nl.next = nn;
                }
            
        }
        return ans.next;   
    }
}

参考链接


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值