6.27 Kgroup 链表 +二刷链表
This commit is contained in:
parent
9e0b5945a2
commit
76f15247d7
@ -10,6 +10,7 @@ package linkedlist;
|
||||
* 链接:https://leetcode.cn/problems/reverse-linked-list-ii/
|
||||
*/
|
||||
//不会一次遍历来翻转
|
||||
//二刷不会
|
||||
public class ReverseBetween {
|
||||
private void reverseLinkedList(ListNode head) {
|
||||
// 也可以使用递归反转一个链表
|
||||
@ -92,4 +93,5 @@ public class ReverseBetween {
|
||||
// 5. 返回新的链表头
|
||||
return dummyNode.next;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,4 +10,44 @@ package linkedlist;
|
||||
* 链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/
|
||||
*/
|
||||
public class ReverseKGroup {
|
||||
// 反转 [head, tail] 这一段,返回新的头和新的尾
|
||||
private ListNode[] reverse(ListNode head, ListNode tail) {
|
||||
ListNode prev = tail.next;
|
||||
ListNode p = head;
|
||||
while (prev != tail) {
|
||||
ListNode nxt = p.next;
|
||||
p.next = prev;
|
||||
prev = p;
|
||||
p = nxt;
|
||||
}
|
||||
// 反转后,tail 变成新头,head 变成新尾
|
||||
return new ListNode[]{ tail, head };
|
||||
}
|
||||
|
||||
public ListNode reverseKGroup(ListNode head, int k) {
|
||||
ListNode dummy = new ListNode(-1);
|
||||
dummy.next = head; // ←—— 关键:把 dummy.next 指向原始 head
|
||||
ListNode pre = dummy;
|
||||
|
||||
while (true) {
|
||||
// 检查剩余是否至少有 k 个节点
|
||||
ListNode tail = pre;
|
||||
for (int i = 0; i < k; i++) {
|
||||
tail = tail.next;
|
||||
if (tail == null) {
|
||||
// 不足 k 个,直接返回
|
||||
return dummy.next;
|
||||
}
|
||||
}
|
||||
ListNode nextGroupHead = tail.next;
|
||||
// 反转 pre.next ... tail 这一段
|
||||
ListNode[] reversed = reverse(pre.next, tail);
|
||||
// 接上前半段:pre → reversedHead
|
||||
pre.next = reversed[0];
|
||||
// reversedTail → nextGroupHead
|
||||
reversed[1].next = nextGroupHead;
|
||||
// 移动 pre 到这一段反转后的尾部,为下一轮做准备
|
||||
pre = reversed[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,8 @@ package linkedlist;
|
||||
|
||||
*/
|
||||
//需重做
|
||||
public class SwapPairs {
|
||||
//二刷会做
|
||||
public class SwapPairs {
|
||||
//只有一个节点或没有节点时无需交换!
|
||||
//递归
|
||||
public ListNode swapPairs(ListNode head) {
|
||||
@ -38,4 +39,20 @@ public class SwapPairs {
|
||||
}
|
||||
return dummyHead.next;
|
||||
}
|
||||
|
||||
public ListNode swapPairs2(ListNode head) {
|
||||
if(head==null || head.next==null) return head;
|
||||
ListNode dummyNode=new ListNode(-1);
|
||||
ListNode pre=dummyNode,cur=head,next=head.next;
|
||||
while (next!=null){
|
||||
cur.next=next.next;
|
||||
next.next=cur;
|
||||
pre.next=next;
|
||||
pre=cur;
|
||||
cur=pre.next;
|
||||
if(cur==null)break;
|
||||
else next=cur.next;
|
||||
}
|
||||
return dummyNode.next;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user