From 12e58d63aa128e3ceb765b1307ab879e04524bac Mon Sep 17 00:00:00 2001 From: yuanguangxin Date: Tue, 21 Jul 2020 18:59:57 +0800 Subject: [PATCH] =?UTF-8?q?add=20q25=5Fk=E4=B8=AA=E4=B8=80=E7=BB=84?= =?UTF-8?q?=E7=BF=BB=E8=BD=AC=E9=93=BE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + .../q25_k个一组翻转链表/ListNode.java | 12 ++++++ .../q25_k个一组翻转链表/Solution.java | 42 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 src/链表操作/q25_k个一组翻转链表/ListNode.java create mode 100644 src/链表操作/q25_k个一组翻转链表/Solution.java diff --git a/README.md b/README.md index 4d014cd..9fa9f93 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ * [q2_两数相加](/src/链表操作/q2_两数相加) * [q19_删除链表的倒数第N个节点](/src/链表操作/q19_删除链表的倒数第N个节点) +* [q25_k个一组翻转链表](/src/链表操作/q25_k个一组翻转链表) * [q61_旋转链表](/src/链表操作/q61_旋转链表) * [q138_复制带随机指针的链表](/src/链表操作/q138_复制带随机指针的链表) * [q206_反转链表](/src/链表操作/q206_反转链表) diff --git a/src/链表操作/q25_k个一组翻转链表/ListNode.java b/src/链表操作/q25_k个一组翻转链表/ListNode.java new file mode 100644 index 0000000..8c6845a --- /dev/null +++ b/src/链表操作/q25_k个一组翻转链表/ListNode.java @@ -0,0 +1,12 @@ +package 链表操作.q25_k个一组翻转链表; + + +public class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } +} + diff --git a/src/链表操作/q25_k个一组翻转链表/Solution.java b/src/链表操作/q25_k个一组翻转链表/Solution.java new file mode 100644 index 0000000..991ef41 --- /dev/null +++ b/src/链表操作/q25_k个一组翻转链表/Solution.java @@ -0,0 +1,42 @@ +package 链表操作.q25_k个一组翻转链表; + +public class Solution { + + public ListNode reverseKGroup(ListNode head, int k) { + ListNode hair = new ListNode(0); + hair.next = head; + + ListNode pre = hair; + ListNode end = hair; + + while (end.next != null) { + for (int i = 0; i < k && end != null; i++){ + end = end.next; + } + if (end == null){ + break; + } + ListNode start = pre.next; + ListNode next = end.next; + end.next = null; + pre.next = reverse(start); + start.next = next; + pre = start; + + end = pre; + } + return hair.next; + } + + private ListNode reverse(ListNode head) { + ListNode pre = null; + ListNode curr = head; + while (curr != null) { + ListNode next = curr.next; + curr.next = pre; + pre = curr; + curr = next; + } + return pre; + } +}