首页 > 其他分享 >K 个一组翻转链表

K 个一组翻转链表

时间:2023-10-25 12:22:25浏览次数:30  
标签:ListNode 一组 next 链表 start end null 节点 翻转


/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */

class Solution {
//反转整条链表的操作 public ListNode reverseKGroup(ListNode head, int k) {
//记录头结点,因为头结点要指向第一组k个节点的尾节点 ListNode start=head; ListNode end=getEndNode(start,k);
//如果第一组都不满足k个 if(end==null){ return head; }
//头结点指向第一组链表的尾节点 head=end;
//反转 reverse(start,end);
//记录第一组的开始节点,因为在以后的每一组反转之前都要先搜索到该组的起始节点和终止节点,即需要记录第一组节点的起始节点第二组开始时的起始节点需要重寻 ListNode lastnode=start; while(lastnode!=null){
//新的起始节点变为上一次的end节点的下一个节点 start=lastnode.next; end=getEndNode(start,k); if(end==null){ return head; } reverse(start,end); lastnode.next=end; lastnode=start; } return head; }
//取以k为一组的链表的结尾 public static ListNode getEndNode(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!=null){ next=cur.next; cur.next=pre; pre=cur; cur=next; } start.next=end; } }

 

标签:ListNode,一组,next,链表,start,end,null,节点,翻转
From: https://www.cnblogs.com/copyjames/p/17786882.html

相关文章

  • 反转单向链表
    反转单向链表在编程语言中,链表是一种常用的数据结构。单向链表是一种线性数据结构,其中每个元素包含数据和一个指向下一个元素的指针。在某些情况下,可能需要反转单向链表。在Python中,可以使用迭代或递归方法来实现此操作。递归方法递归是一种在函数内部调用自身的编程技术。使用递归......
  • 面试必刷TOP101:12、单链表的排序
    一、题目publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@paramheadListNode类theheadnode*@returnListNode类*/publicListNodesortInList(ListNodehead){......
  • 灯塔--链表的学习
    双链表双链表的存储结构typedefstructDNode{ //定义双链表的节点类型 ElemTypedata; //数据域 structDNode*prior,*next;}DNode,*DLinkList;双链表的初始化boolInitDLinkList(DLinkList&L){DNodep=(DNode*)malloc(sizeof(DNode));if(L==NULL)retur......
  • 面试必刷TOP101:11、链表相加(二)
    一、题目二、题解反转链表:publicListNodeaddInList(ListNodehead1,ListNodehead2){//进行判空处理if(head1==null)returnhead2;if(head2==null){returnhead1;}//反转h1链表head1......
  • 数据结构之链表(Java)
    一:概述数组是严格的正规军,那么链表就是灵活多变的地下党链表是一种在物理上非连续、非顺序的数据结构,由若干节点(node)所组成单向链表的每一个节点又包含两部分,一部分是存放数据变量的data,另一部分是指向下一节点的指针next.二:链表的具体说明<1>链表的基本操作总括*链表的基......
  • 代码随想训练营第十四天(Python)| 层序遍历 10 、● 226.翻转二叉树 、101.对称二叉树 2
    层序遍历1、迭代法,使用队列classSolution:deflevelOrder(self,root:Optional[TreeNode])->List[List[int]]:res=[]ifrootisNone:returnresqueue=[root]whilequeue:n=len(queue)......
  • 合并 K 个升序链表
     例如在一个数组里存放几组链表,要解决按照升序合并这几个链表可以按照合并两个链表的思想,比较val大小,小的被链接,然后指针后移,但由于是数组所以需要遍历找到最小的几组链表里最小的那个节点,以及在数组中的位置,其方法就是按照链表特性每次比较子数组的中的head节点,即例如lists[0]......
  • 链表理论部分
    链表理论部分什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针)、最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。如图所示:链表的类型接下来说一下链表的......
  • 01_移除链表元素
    移除链表元素题意:删除链表中等于给定值val的所有节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head=[7,7,7,7],val=7输出:[]203.移除链表元素实现代码如下:(本代码是通过带头节点的单链表来实现......
  • LeetCode | 19. 删除链表的倒数第 N 个结点
    1相关标签链表、双指针、C语言2报错情况2.1题目给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。2.2错误代码/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNo......