Rotate ListNode In K Groups

K个节点一组,反转链表;

private Node reverse(Node pre, Node next){
    Node last = pre.next;
    Node cur = last.next;
    while(cur != next){
        last.next = cur.next;
        cur.next = pre.next;
        pre.next = cur;
        cur = last.next;
    }
    return last;
} 

public Node reverseK(Node head, int k){
    if(head == null || head.next == null || k < 1){
        return head;
    }

    Node dummy = new Node(-1);
    dummy.next = head;
    Node pre = dummy;
    Node cur = head;
    int cnt = 0;
    while(cur != null){
        cnt++;
        Node next = cur.next;
        if(cnt == k){
            pre = reverse(pre, next);
            cnt = 0;
        }
        cur = next;
    }
    return dummy.next;
}

还有一种思路,用双向队列。当队列中的node个数小于k时,不需要倒序,直接输出;当队列中的个数等于k时,从队尾获取元素。

public ListNode reverseK(ListNode head, int k){
    if(head == null || k <=1){
        return head;    
    }

    Dequeue<ListNode> st = new ArrayDequeue<>();
    ListNode dummy = new ListNode(0);
    ListNode p = dummy;
    while(true){
        int cnt = 0;
        ListNode tmp = head;
        while(tmp != null && cnt <k){
            st.add(tmp);
            cnt ++;
            tmp = tmp.next;
        }
        if(k != cnt){
            p.next = head;
            break;
        }

        while(!st.isEmpty()){
            p.next = st.pollLast();
            p = p.next;
        }
        
        p.next = tmp;
        head = tmp;
    }
    return dummy.next;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值