网站首页 > 文章精选 正文
鹅厂是一家能让你拥有多元化职业发展的平台。尊重个性、轻松自在的工作环境、有趣的互联网工作。在鹅厂这家拥有海量用户基础的公司工作,能得到互联网应用最前沿的视野、获得好的专家辅导。小编从今天开始就会陆续作死挑战鹅厂面试题,并持续为大家更新!
题目
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
思路
单链表,官方释义为:是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。如图:
单链是单向的,只能单向访问,现需要将链表翻转过来,也就是说next指针要反向。
1、简单思路:
当然这里有个简单的思路:遍历一遍链表,将每个元素都存储进vector容器,然后反向迭代vector的每个元素,并将元素的next指针指向容器中前一个元素。这是最简单的方式,实现起来也十分好理解;
ListNode* reverseList(ListNode* head) { if(head == NULL)return NULL; vector<ListNode*> vec ; ListNode* node_head = head ; while (node_head->next!=NULL) { vec.push_back(node_head); node_head = node_head->next ; } vec.push_back(node_head); auto iter = vec.rbegin(); while (iter != vec.rend()) { if(iter+1!=vec.rend())(*iter)->next = *(iter+1); else (*iter)->next = NULL ; iter ++ ; } return node_head; }
但是这种方式并不是鹅厂想要的,因为他们想考的是面试者对链表数据结构的理解程度,以及逻辑思维的深度。
2、从链表角度的思路
单链表反转,我们需要处理的就是当前节点、当前节点前一个节点、当前节点后一个节点,这三个节点之间的逻辑关系(node_head、node_temp_pre、node_temp_next)。其实我们只需要将头指针逐步顺着链表往后移,并且在移动过程中,改变next的指向。
思路实现关键点:
首先我们得在改变当前节点next指向之前将next指向的节点访问出来并通过指针保存起来,不然当当前节点的next指向改变再来访问就访问不到了
然后将next指向node_temp_pre(之前保存的前一个节点)
再然后要做好准备将head往后移动一位,将当前节点赋值给node_temp_pre,作为后续节点的next节点
最后移动head
题解
ListNode* reverseList(ListNode* head) { if(head == NULL)return NULL; ListNode* node_head = head ; ListNode* node_temp_pre = NULL ; ListNode* node_temp_next = NULL ; while(node_head->next!=NULL) { node_temp_next = node_head->next; node_head->next = node_temp_pre ; node_temp_pre = node_head ; node_head = node_temp_next; } node_head->next = node_temp_pre; return node_head; }
- 上一篇: 数据结构:单链表算法题,常见技巧套路心得分享
- 下一篇: 看一遍就理解,图解单链表反转
猜你喜欢
- 2025-05-15 C语言创建链表
- 2025-05-15 看一遍就理解,图解单链表反转
- 2025-05-15 数据结构:单链表算法题,常见技巧套路心得分享
- 2025-05-15 那些经典算法:跳表
- 2025-05-15 数据结构错题收录(十八)
- 2025-05-15 数据结构与算法——带你走进循环链表的相关操作
- 2025-05-15 二叉树展开为链表-迭代法
- 最近发表
-
- Vue3+Django4全新技术实战全栈项目|高清完结
- 工厂模式+策略模式消除 if else 实战
- 每天一个 Python 库:httpx异步请求,让接口测试飞起来
- 如何高效实现API接口的自动化测试?
- 前端工程化:从“手忙脚乱”到“从容协作”的进化记
- 使用C#创建服务端Web API(c#开发web服务器)
- SpringBoot之旅第四篇-web开发(springboot做web项目)
- 一文读懂SpringMVC(一文读懂新型政策性金融工具)
- Rust Web编程:第十二章 在 Rocket 中重新创建我们的应用程序
- Apache Druid 数据摄取——本地数据和kafka流式数据 一篇文章看懂
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)