首页 > 其他分享 >BM3 链表中的节点每k个一组翻转

BM3 链表中的节点每k个一组翻转

时间:2023-05-06 20:33:36浏览次数:43  
标签:ListNode cur next 链表 BM3 tail 节点 翻转

描述

将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。   数据范围:0≤n≤2000 ,1≤k≤2000 ,链表中每个元素都满足 0≤val≤1000
要求空间复杂度 O(1),时间复杂度 O(n)   例如: 给定的链表是 1→2→3→4→51→2→3→4→5 对于k=2 , 你应该返回 2→1→4→3→5
对于k=3 , 你应该返回 3→2→1→4→5
 
 1 import java.util.*;
 2 
 3 /*
 4  * public class ListNode {
 5  *   int val;
 6  *   ListNode next = null;
 7  * }
 8  */
 9 
10 public class Solution {
11     /**
12      * 
13      * @param head ListNode类 
14      * @param k int整型 
15      * @return ListNode类
16      */
17     public ListNode reverseKGroup (ListNode head, int k) {
18         ListNode tail = head;
19 //        获得每个反转组的最后一个节点
20         for (int i = 0; i < k; i++) {
21             if (tail == null) {
22                 return head;
23             }
24             tail = tail.next;
25         }
26 
27 //        开始反转
28         // ListNode pre = null;
29         ListNode pre = new ListNode(-1);
30         ListNode cur = head;
31 
32         while (cur != tail) {
33             ListNode next = cur.next;
34             cur.next = pre;
35             pre = cur;
36             cur = next;
37         }
38         head.next = reverseKGroup(tail,k);
39 
40         return pre;
41     }
42 }

 

标签:ListNode,cur,next,链表,BM3,tail,节点,翻转
From: https://www.cnblogs.com/gol2q/p/17378400.html

相关文章

  • BM2 链表内指定区间反转
    描述将一个节点数为size链表m 位置到 n位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。例如:给出的链表为 1→2→3→4→5→NULL, m=2,n=4,返回 1→4→3→2→5→NULL. 数据范围: 链表长度 0<size≤1000,0<m≤n≤size,链表中每个节点的值满足 ∣val∣≤10......
  • BM1 反转链表
    描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0≤n≤1000要求:空间复杂度 O(1) ,时间复杂度 O(n) 。 如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转......
  • LeetCode 24. 两两交换链表中的节点
    题目链接:LeetCode24.两两交换链表中的节点本题不涉及算法,直接模拟就可以了,但是模拟的过程中,最好进行画图演示,不然容易出错。想要达到两两交换链表中节点的效果,就需要按照以下三个步骤进行。同时为了将头结点和非头结点统一处理,因此新建一个虚拟头结点,初始时,cur指向虚拟头结......
  • 合并k个已排序的链表
    描述合并k 个升序的链表并将结果作为一个升序的链表返回其头节点。 数据范围:节点总数 0≤n≤5000,每个节点的val满足∣val∣<=1000要求:时间复杂度 O(nlogn) 示例输入:[{1,2},{1,4,5},{6}]返回值:{1,1,2,4,5,6} 算法思想1、将k个链表两两进行合并(采用顺......
  • 集合、序列、链表进行过滤排序
    C#有Linq对list等数据的排序过滤等操作java有stream()php也有第三方库phpLinq,或array_filter()、array_search()、array_map()等也行。.....------------它们都是,配合一个方法或函数(可以匿名函数和lambda表达式),进行过滤. 相关:  https://www.bilibili.com/video/BV1B5......
  • 单链表
    单链表的每个结点,包含值和链接到下一个结点的引用字段。//definitionforsingly-linkedlist.structSinglyListNode{intval;SinglyListNode*next;SinglyListNode(intx):val(x),next(Null){}//用头结点来表示整个列表};与数组不同,我们无法在常量时间内访......
  • LeetCode刷题记录|LeetCode热题100|226.翻转二叉树(easy)
    题目描述:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。 思路与算法:从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点root的左右两棵子树都已经翻转,只需交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。时间复......
  • LeetCode 206. 反转链表
    题目链接:LeetCode206.反转链表本题是链表题目中非常重要的一道题目--反转指针。解题方法有两种:1.双指针法2.递归法首先看双指针法:快指针总是在慢指针的前面,也就是每次将快指针的节点的next指针更新成指向慢指针,这样不就进行了反转嘛。完整代码如下:funcreverseList(hea......
  • LeetCode 203. 移除链表元素
    题目链接:LeetCode203.移除链表元素本题是一个经典的单链表删除元素的题目,主要注意的有两点:如果删除的元素是不是头元素,则直接p.Next=p.Next.Next即可如果删除的元素是头元素,则需要进行单独的处理forhead!=nil&&head.Val==val{head=head.Next}ifh......
  • 合并两个排序的链表
    描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围: 0≤n≤1000,−1000≤节点值≤1000要求:空间复杂度 O(1),时间复杂度 O(n) 如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6} ......