zoukankan      html  css  js  c++  java
  • 25. Reverse Nodes in k-Group

    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.
     

    M1: recursive

    cur指向head,用cnt计数,先走k步。当走了k步时(即cnt == k),递归,然后反转这一部分的链表

    time: O(n), space: O(n)

    /**
     * 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 || head.next == null) {
                return head;
            }
            int cnt = 0;
            ListNode cur = head;
            while(cur != null && cnt < k) {
                cur = cur.next;
                cnt++;
            }
            
            if(cnt == k) {
                cur = reverseKGroup(cur, k);
                while(cnt-- > 0) {
                    ListNode next = head.next;
                    head.next = cur;
                    cur = head;
                    head = next;
                }
                head = cur;
            }
            return head;
        }
    }
  • 相关阅读:
    软件工程课程建议
    结对编程2
    结对编程---《四则运算》
    AVAudioPlayer播放音乐
    《问吧》需求分析
    有关结对编程的感想
    UItabBarController
    ViewController 视图控制器的常用方法
    <问吧>调查问卷心得体会
    UINavigationController导航控制器
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10180540.html
Copyright © 2011-2022 走看看