首页 > 其他分享 >#yyds干货盘点# LeetCode面试题:K 个一组翻转链表

#yyds干货盘点# LeetCode面试题:K 个一组翻转链表

时间:2023-02-24 19:01:27浏览次数:40  
标签:yyds 面试题 ListNode head next 链表 tail hair

1.简述:

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

 

示例 1:

输入:head = [1,2,3,4,5], k = 2

输出:[2,1,4,3,5]

示例 2:

输入:head = [1,2,3,4,5], k = 3

输出:[3,2,1,4,5]

2.代码实现:

class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode hair = new ListNode(0);
hair.next = head;
ListNode pre = hair;

while (head != null) {
ListNode tail = pre;
// 查看剩余部分长度是否大于等于 k
for (int i = 0; i < k; ++i) {
tail = tail.next;
if (tail == null) {
return hair.next;
}
}
ListNode nex = tail.next;
ListNode[] reverse = myReverse(head, tail);
head = reverse[0];
tail = reverse[1];
// 把子链表重新接回原链表
pre.next = head;
tail.next = nex;
pre = tail;
head = tail.next;
}

return hair.next;
}

public ListNode[] myReverse(ListNode head, ListNode tail) {
ListNode prev = tail.next;
ListNode p = head;
while (prev != tail) {
ListNode nex = p.next;
p.next = prev;
prev = p;
p = nex;
}
return new ListNode[]{tail, head};
}
}

标签:yyds,面试题,ListNode,head,next,链表,tail,hair
From: https://blog.51cto.com/u_15488507/6084337

相关文章

  • #yyds干货盘点# LeetCode面试题:删除有序数组中的重复项
    1.简述:给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不......
  • 【链表】链表变化时其中的节点变化情况
    这个点之前一直很混淆,今天碰巧看了个题,记录一下。对于node*p=a;此时p与a的地址一样,那么p发生变化时a是不是也变化了呢?发现有两种不一样的情况:如果p=p->next;此时p......
  • 删除链表重复的元素
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*deleteDuplicates(str......
  • 那些高级前端是如何回答面试题的
    防抖节流题目描述:手写防抖节流实现代码如下://防抖functiondebounce(fn,delay=300){//默认300毫秒lettimer;returnfunction(){constargs=......
  • 字节前端二面高频vue面试题整理
    怎样理解Vue的单向数据流数据总是从父组件传到子组件,子组件没有权利修改父组件传过来的数据,只能请求父组件对原始数据进行修改。这样会防止从子组件意外改变父级组件......
  • 京东前端二面必会vue面试题(持续更新中)
    说一下Vue的生命周期Vue实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom->渲染、更新->渲染、卸载等⼀系列过程,称这是Vue的⽣命周期。......
  • 阿里前端二面必会react面试题指南
    这段代码有什么问题吗?这段代码有什么问题:this.setState((prevState,props)=>{return{streak:prevState.streak+props.count,};});答案:没有什么问......
  • 死锁面试题
    死锁是指在并发系统中,两个或多个进程或线程因为相互竞争系统资源而陷入相互等待的状态,无法继续执行的情况。简单来说,死锁就是一种进程或线程间互相等待对方释放资源的无限......
  • 链表练习——两数求和
    先看题目:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式......
  • 数据库相关的面试题
    一、SQL语言包括哪些类型?数据定义语言 create/alter/drop table数据操作语言  select/update/insert/delete数据控制语言  Grant  Revoke二、删......