LeetCode_25

LeetCode_25

  • 题意以及限制条件
  • 想到的所有可能解法
  • 对应的代码
  • 测试样例

题意以及限制条件

  1. 题目:LeetCode_25_第1张图片
    LeetCode_25_第2张图片LeetCode_25_第3张图片LeetCode_25_第4张图片

  2. 限制条件:
    LeetCode_25_第5张图片

想到的所有可能解法

  • Ways_1——迭代法

    1. 时间复杂度——O(n);空间复杂度——O(1);

    2. 此题与LeetCode_206有异曲同工之妙,关键在于确定链表中需要转置的部分以及完成转置后的各部分重新串联在一起。

    3. 关于链表题求解的心得体会:“手动模拟”——会有更好的理解,如下为理解的例子:

      1. LeetCode_25_第6张图片

对应的代码

  • Ways_1
class Solution {
     
    public ListNode reverseKGroup(ListNode head, int k) {
     
        
        if (head == null || head.next == null || k == 1)
            return head;
        ListNode dummyhead = new ListNode(-1);
        dummyhead.next = head;
        ListNode begin = dummyhead;
        int i = 0;
        while (head != null) {
     
            ++i;
            if (i % k == 0) {
     
                begin = reverse(begin, head.next);
                head = begin.next;
            } else {
     
                head = head.next;
            }
        }
        return dummyhead.next;
        
    }
    
    public static ListNode reverse(ListNode begin, ListNode end) {
     
        ListNode prev = begin;
        ListNode curr = begin.next;
        ListNode first, next;
        first = curr;
        //Processing Intermediate Nodes
        while (curr != end) {
     
            next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }
        //Processing Beginning && End Nodes
        begin.next = prev;
        first.next = curr;
        
        return first;
    }
    
}

测试样例

LeetCode_25_第7张图片

你可能感兴趣的:(LeetCode,链表,java,算法)