剑指offer:面试题24. 反转链表
题目:反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
解题:
方法一:双指针
- 我们可以申请两个指针,第一个指针叫 new_next,最初是指向 old_next 的;
- 第二个指针 old_next 指向 head,然后不断遍历 old_next;
- 每次迭代到 old_next,都将 old_next 的 next 指向 new_next,然后 new_next 和 old_next 前进一位;
- 都迭代完了(old_next 变成 null 了),new_next 就是最后一个节点了。
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/class Solution {
public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) return head;ListNode* new_next = NULL,*old_next = head;while(old_next) {ListNode* tmp = old_next->next;old_next->next = new_next;new_next = old_next;old_next = tmp;}return new_next;}
};
方法二:递归
递归的两个条件:
- 终止条件是当前节点或者下一个节点==null
- 在函数内部,改变节点的指向,也就是 head 的下一个节点指向 head 递归函数那句
head.next.next = head
class Solution {
public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) return head;//递归终止条件是当前为空,或者下一个节点为空ListNode* cur = reverseList(head->next);//这里的cur就是最后一个节点//如果链表是 1->2->3->4->5,那么此时的cur就是5//而head是4,head的下一个是5,下下一个是空//所以head.next.next 就是5->4head->next->next = head; head->next = NULL; return cur;}
};
剑指offer:面试题24. 反转链表相关推荐
- 剑指Offer - 面试题24. 反转链表(遍历/递归)
1. 题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-&g ...
- 剑指offer面试题24. 反转链表(双指针)
题目描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 思路 详见链接 代码 class Solution:def reverseList(self, head:ListN ...
- 剑指offer面试题[16]-反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素. 解决与链表相关的问题总是有大量的指针操作,而指针操作的代码总是容易出错的的.很多面试官喜欢出链表相关的问题,就是想通过指针操作来考查应聘者的编 ...
- 剑指offer——面试题56:链表中环的入口
剑指offer--面试题56:链表中环的入口 Solution1: 非常经典的快慢指针套路题.下面这个链接讲解的很详细.其实问题的关键在于为什么快指针的速度一定是慢指针的2倍,3倍或4倍行不行?? 快 ...
- 剑指offer——面试题24:二叉搜索树的后序遍历序列
剑指offer--面试题24:二叉搜索树的后序遍历序列 Solution1: 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二 ...
- 剑指offer(15)反转链表
反转链表就是 先把当前节点所指向的原节点存起来,这里用tmp表示,此时tmp的值为2: 然后使当前节点指向前一个节点(cur.next=pre),然后将当前节点的值赋给pre(pre=cur):再然后 ...
- [剑指offer]面试题15:链表中倒数第k个结点
面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...
- 剑指offer面试题15:链表中倒数第K个节点
题目:输入一个链表,输出该链表的倒数第K个节点.为了符合大多数人的习惯,本题从1开始计数,即链表尾节点是倒数第一个节点. 解题思路: 解法一:一般情况下,单向链表无法从后一个节点获取到它前面的节点,可 ...
- 剑指offer(C++)-JZ24:反转链表(数据结构-链表)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头. 数据范 ...
- 剑指Offer - 面试题18. 删除链表的节点
1. 题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val ...
最新文章
- Linux——快照与克隆
- 登錄CentOS出現-bash-4.1#
- NOIP2016 D2T3 愤怒的小鸟
- ABAP的语法高亮是如何在浏览器里显示的
- YBTOJ:矛盾指数(网络流-最大权闭合图)
- Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
- 各数据类型的取值范围及占用字节数。。
- js简单屏蔽鼠标右键实现方式
- kmean法和dbscan法的直观比较
- win2003服务器安全设置
- 分析一款帮你戒烟的App戒烟行动(kick it)
- 为 SmartDNS 配置广告过滤
- linux u盘读取速度,linux dd命令测试U盘读写速度
- 小白学 Python 数据分析(8):Pandas 数据透视表(pivot_table)
- 边缘计算开源项目概述
- 我是怎样的一个人感悟
- HTML中document的作用,html中的document对象是什么?一篇文章让你了解document对象
- 价值博客们--by 刘末鹏
- Apache的Rewrite知识点梳理(mod_rewrite、RewriteCond、RewriteRule)
- 四大开源3d游戏引擎探究----irrlicht与orge对比