翻转链表k个元素——递归
创始人
2024-05-26 17:16:52
0

题目描述

25. K 个一组翻转链表

难度困难1920收藏分享切换为英文接收动态反馈

给你链表的头节点 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]

提示:

  • 链表中的节点数目为 n

  • 1 <= k <= n <= 5000

  • 0 <= Node.val <= 1000

进阶:你可以设计一个只用 O(1) 额外内存空间的算法解决此问题吗?

递归方法

如果对该代码不清楚可以画图进行理解

核心思想是将k个元素进行反转 利用递归进行循环

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* reverseKGroup(struct ListNode* head, int k)
{//创建是那个指针 s记录反转之后的头节点 e记录反转之后的尾节点 c要反转的下一个节点struct ListNode* ptrStart;struct ListNode* ptrEnd;struct ListNode* ptrCurr;if(head == NULL){return head;}//如果头节点不为空 但所有节点之和不等于k也就不反转 直接返回headptrCurr = head;for(int i = 0;inext;}else{return head;//遇到空就返回头节点}}//将k个元素反转 首先要明白 两个元素进行翻转需要进行1此 以此类推 k个元素 需要k-1次ptrStart = head;ptrEnd = ptrStart;ptrCurr = ptrStart->next;for(int i = 1;inext = ptrCurr->next;ptrCurr->next = ptrStart;ptrStart = ptrCurr;ptrCurr = ptrEnd->next;}}ptrEnd->next = reverseKGroup(ptrCurr,k);//递归 看起来还是挺简洁的return ptrStart;
}

非递归

将链表中的元素放到数组中 将数组中的元素进行反转 再将数组中的元素按照下标与节点的对应关系

将数组值赋值给对应节点

相当于改变链表的值 没有对链表节点进行改变

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* reverseKGroup(struct ListNode* head, int k){struct ListNode *p = head;int len = 0;while(p){len++;p = p->next;}int nums[len],i = 0;p = head;while(p){nums[i++] = p->val;p = p->next;}for(i = 0;i + k <= len;i = i + k){int m,n;for(m = i,n = i + k - 1;m < n;m++,n--){int temp = nums[m];nums[m] = nums[n];nums[n] = temp;}}// for(i = 0;i < len;i++){     // 打印//     printf("%d ",nums[i]);// }p = head,i = 0;while(p){p->val = nums[i++];p = p->next;}return head;
}

以上两种方法 都还不错~

相关内容

热门资讯

安卓系统相册软件下载,下载与使... 手机里的相册是不是已经满满当当,想要给它们找个新家?别急,今天就来给你安利几款超好用的安卓系统相册软...
安卓9系统优化软件,解锁流畅体... 你有没有发现,自从你的安卓手机升级到了安卓9系统,运行速度好像变得更快了?是不是觉得手机变得更加流畅...
各厂商安卓系统对比,性能、特色... 你有没有发现,现在手机市场上安卓系统的竞争可是相当激烈呢!各大厂商纷纷推出自己的特色系统,让人眼花缭...
车机进入安卓系统,智能驾驶体验... 你有没有发现,最近你的车机系统好像变得不一样了?没错,车机系统正在悄悄地进入安卓的大家庭!这可不是什...
安卓系统自带壁纸高清,自带高清... 亲爱的手机控们,你是否曾为安卓系统自带的那些高清壁纸而驻足欣赏?那些色彩斑斓、风格迥异的画面,是不是...
安卓机换成钟表系统,探索智能穿... 你有没有想过,你的安卓手机其实也可以换上钟表系统呢?是的,你没听错,就是那种优雅、简洁、充满艺术感的...
安卓lcs操作系统,轻量级、安... 你知道吗?在智能手机的世界里,有一个操作系统可是相当出名的,那就是安卓LCS操作系统。它就像一位魔法...
安卓系统微信包月,畅享无限制沟... 你知道吗?在咱们这个手机不离手的年代,微信可是咱们日常生活中不可或缺的好帮手。不过,你知道吗?安卓系...
我想换安卓系统,系统升级换新体... 亲爱的读者,你是否也有过这样的冲动?看着身边的朋友纷纷换上了安卓系统,心里痒痒的,也想尝试一下?没错...
用了苹果换安卓系统,系统更迭背... 你知道吗?最近我可是经历了一场大变身呢!是的,你没听错,我用苹果手机换成了安卓系统。这可不是一个小决...
手机刷机系统安卓,解锁手机潜能... 你有没有想过,你的手机是不是已经有点儿“老态龙钟”了呢?别急,别急,今天就来给你揭秘如何给手机来个焕...
安卓pe10系统,功能与特色深... 你有没有听说最近安卓PE10系统火得一塌糊涂?没错,就是那个让无数手机用户为之疯狂的系统。今天,我就...
安卓系统程序安装目录,安卓系统... 你有没有想过,当你手机里安装了一个又一个应用程序时,它们都藏在哪里呢?没错,就是那个神秘的安卓系统程...
ios系统能定位安卓系统吗,i... 你有没有想过,你的iPhone和安卓手机之间竟然能玩出这么一出“追踪大戏”?没错,我要说的就是那个让...
安卓系统时间放到桌面,桌面概览... 你有没有发现,手机上的时间有时候会偷偷跑得飞快,让你不知不觉就错过了重要的事情?别急,今天就来教你怎...
安卓系统怎么刷win,体验全新... 你有没有想过,把你的安卓手机变成一台Windows电脑呢?听起来是不是有点不可思议?但别急,今天我就...
安卓仿苹果系统设置,打造极致用... 你有没有发现,现在越来越多的安卓手机开始模仿苹果的操作系统了?没错,就是那个简洁又好用的设置界面!今...
emui 安卓系统对应关系,E... 你有没有发现,每次打开你的华为手机,那个界面看起来是不是特别顺眼?那是因为华为的EMUI系统,它就像...
永诺安卓系统相机,功能解析与使... 你有没有发现,手机拍照已经成为我们生活中不可或缺的一部分?而在这其中,永诺安卓系统的相机功能可是相当...
tinder安卓版系统错误,揭... 最近在使用Tinder安卓版的时候,你是不是也遇到了一些让人头疼的系统错误呢?别急,今天就来和你聊聊...