链表题--01----K 个一组翻转链表

Posted 高高for 循环

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表题--01----K 个一组翻转链表相关的知识,希望对你有一定的参考价值。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


K 个一组翻转链表

https://leetcode.com/problems/reverse-nodes-in-k-group/

题目:




分析:



数K个数,返回

	public static ListNode getKGroupEnd(ListNode start, int k) 
		while (--k != 0 && start != null) 
			start = start.next;
		
		return start;
	

链表反转

	public static void reverse(ListNode start, ListNode end) 
		end = end.next;
		ListNode pre = null;
		ListNode cur = start;
		ListNode next = null;
		while (cur != end) 
			next = cur.next;
			cur.next = pre;
			pre = cur;
			cur = next;
		
		start.next = end;
	

总逻辑

代码


// 测试链接:https://leetcode.com/problems/reverse-nodes-in-k-group/
public class Code04_ReverseNodesInKGroup 

	// 不要提交这个类
	public static class ListNode 
		public int val;
		public ListNode next;
	

	public static ListNode reverseKGroup(ListNode head, int k) 
		ListNode start = head;
		ListNode end = getKGroupEnd(start, k);
		if (end == null) 
			return head;
		
		// 第一组凑齐了!
		head = end;
		reverse(start, end);
		// 上一组的结尾节点
		ListNode lastEnd = start;
		while (lastEnd.next != null) 
			start = lastEnd.next;
			end = getKGroupEnd(start, k);
			if (end == null) 
				return head;
			
			reverse(start, end);
			lastEnd.next = end;
			lastEnd = start;
		
		return head;
	

	public static ListNode getKGroupEnd(ListNode start, int k) 
		while (--k != 0 && start != null) 
			start = start.next;
		
		return start;
	

	public static void reverse(ListNode start, ListNode end) 
		end = end.next;
		ListNode pre = null;
		ListNode cur = start;
		ListNode next = null;
		while (cur != end) 
			next = cur.next;
			cur.next = pre;
			pre = cur;
			cur = next;
		
		start.next = end;
	


以上是关于链表题--01----K 个一组翻转链表的主要内容,如果未能解决你的问题,请参考以下文章

链表--K个一组反转链表(leetcode 25

leetCode 25 K个一组翻转链表

25.K个一组翻转链表

25.K个一组翻转链表

25. k个一组翻转链表-LeetCode

25. K 个一组翻转链表