题目:反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

输入: 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. 反转链表相关推荐

  1. 剑指Offer - 面试题24. 反转链表(遍历/递归)

    1. 题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-&g ...

  2. 剑指offer面试题24. 反转链表(双指针)

    题目描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 思路 详见链接 代码 class Solution:def reverseList(self, head:ListN ...

  3. 剑指offer面试题[16]-反转链表

    题目描述 输入一个链表,反转链表后,输出链表的所有元素. 解决与链表相关的问题总是有大量的指针操作,而指针操作的代码总是容易出错的的.很多面试官喜欢出链表相关的问题,就是想通过指针操作来考查应聘者的编 ...

  4. 剑指offer——面试题56:链表中环的入口

    剑指offer--面试题56:链表中环的入口 Solution1: 非常经典的快慢指针套路题.下面这个链接讲解的很详细.其实问题的关键在于为什么快指针的速度一定是慢指针的2倍,3倍或4倍行不行?? 快 ...

  5. 剑指offer——面试题24:二叉搜索树的后序遍历序列

    剑指offer--面试题24:二叉搜索树的后序遍历序列 Solution1: 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二 ...

  6. 剑指offer(15)反转链表

    反转链表就是 先把当前节点所指向的原节点存起来,这里用tmp表示,此时tmp的值为2: 然后使当前节点指向前一个节点(cur.next=pre),然后将当前节点的值赋给pre(pre=cur):再然后 ...

  7. [剑指offer]面试题15:链表中倒数第k个结点

    面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...

  8. 剑指offer面试题15:链表中倒数第K个节点

    题目:输入一个链表,输出该链表的倒数第K个节点.为了符合大多数人的习惯,本题从1开始计数,即链表尾节点是倒数第一个节点. 解题思路: 解法一:一般情况下,单向链表无法从后一个节点获取到它前面的节点,可 ...

  9. 剑指offer(C++)-JZ24:反转链表(数据结构-链表)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头. 数据范 ...

  10. 剑指Offer - 面试题18. 删除链表的节点

    1. 题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val ...

最新文章

  1. Linux——快照与克隆
  2. 登錄CentOS出現-bash-4.1#
  3. NOIP2016 D2T3 愤怒的小鸟
  4. ABAP的语法高亮是如何在浏览器里显示的
  5. YBTOJ:矛盾指数(网络流-最大权闭合图)
  6. Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
  7. 各数据类型的取值范围及占用字节数。。
  8. js简单屏蔽鼠标右键实现方式
  9. kmean法和dbscan法的直观比较
  10. win2003服务器安全设置
  11. 分析一款帮你戒烟的App戒烟行动(kick it)
  12. 为 SmartDNS 配置广告过滤
  13. linux u盘读取速度,linux dd命令测试U盘读写速度
  14. 小白学 Python 数据分析(8):Pandas 数据透视表(pivot_table)
  15. 边缘计算开源项目概述
  16. 我是怎样的一个人感悟
  17. HTML中document的作用,html中的document对象是什么?一篇文章让你了解document对象
  18. 价值博客们--by 刘末鹏
  19. Apache的Rewrite知识点梳理(mod_rewrite、RewriteCond、RewriteRule)
  20. 四大开源3d游戏引擎探究----irrlicht与orge对比

热门文章

  1. 写单元测试应该注意什么
  2. git 无法拉取新的远程分支
  3. 创建一个Scalar-valued Function函数来实现LastIndexOf
  4. jQuery和dom的相互转换
  5. 写给自己的web开发资源
  6. SQL Server存储过程输入参数使用表值
  7. 基础 HTML之目录问题(相对路径和绝对路径区别)
  8. SQL Server 远程无法连接
  9. 有关 ecshop 属性 {$goods.goods_attr|nl2br} 标签的赋值问题
  10. tarjan算法不是很懂先mark一下。