LeetCode 25.Reverse Nodes in k-Group k个一组翻转链表 C#

博客围绕k个一组翻转链表展开,包含解题思路及代码,涉及LeetCode相关内容,使用C#语言实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Reverse Nodes in k-Group k个一组翻转链表

在这里插入图片描述

思路

  • 代码都是从网上收集的
  • 翻转k个节点的链表时,需要这个链表头结点之前的一个节点,也就是假头节点。链表翻转完后,这个假头结点要指向翻转完的链表的头结点。然后把链表的最后一个节点作为下一个需翻转的链表的假头结点。
  • head -> n1 -> n2 ... nk -> nk+1 => head -> nk -> nk-1 .. n1 -> nk+1 return n1

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode ReverseKGroup(ListNode head, int k) {
        
    ListNode dummy = new ListNode(0); 
	dummy.next = head; 
	head = dummy; 
	while (true) { 
	head = reverseK(head, k); 
	if (head == null) { 
	break; 
	} 
	} 
	return dummy.next; 
} 

public ListNode reverseK(ListNode head, int k) { 
	ListNode nk = head; 
	for (int i = 0; i < k; i++) { 
	if (nk == null) { 
	return null; 
	} 
	nk = nk.next; 
} 
	if (nk == null) { 
	return null; 
} 
// reverse 
	ListNode n1 = head.next; 
	ListNode nkplus = nk.next; 
	ListNode prev = null; 
	ListNode curt = n1; 
	while (curt != nkplus) { 
	ListNode temp = curt.next; 
	curt.next = prev; 
	prev = curt; 
	curt = temp; 
} 
// connect 
	head.next = nk; 
	n1.next = nkplus; 
	return n1; 
} 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值