【剑指Offer】面试题24. 反转链表

时间:2022-09-13 21:04:51

题目

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

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

限制:

0 <= 节点个数 <= 5000

注意:本题同【LeetCode】206. 反转链表

思路一:反转链表元素

取出链表中元素放入vector中,然后将vector中元素逆向存入链表中。

  1. 遍历链表,用vector存放数组元素。
  2. 再次遍历链表,从vector尾部读取元素依次放入链表中。

代码

时间复杂度:O(n)

空间复杂度:O(n)

ListNode* reverseList(ListNode* head) {
if (head == nullptr) {
return head;
}
vector<int> res;
ListNode *pNode = head;
while (pNode != nullptr) {
res.push_back(pNode->val);
pNode = pNode->next;
}
vector<int>::reverse_iterator iter = res.rbegin();
pNode = head;
while (pNode != nullptr) {
pNode->val = *iter;
iter++;
pNode = pNode->next;
}
return head;
}

思路二:迭代

需要调整当前元素指针指向前一个元素,必须先存储其前一个元素,另外为了继续遍历链表,在改动指针前,还需要存储下一个节点。新头结点为最后保存的前一个元素。

代码

时间复杂度:O(n)

空间复杂度:O(1)

ListNode* reverseList(ListNode* head) {
if (head == nullptr) {
return head;
}
ListNode *cur = head;
ListNode *pre = nullptr;
while (cur != nullptr) {
ListNode *next = cur->next;//保存当前节点下一个节点
cur->next = pre;//反转指针
pre = cur;//分别移动pre和cur
cur = next;
}
return pre;
}

思路三:递归

通过递归反转链表后面的元素,递归终止条件为当前节点为空或下一个节点为空。现在对头节点进行反转,假设链表此时为:

head -> n1 <- n2... <-n

对头结点进行反转:head->next->next = head;

然后将头节点next设为nullptr。

代码

时间复杂度:O(n)

空间复杂度:O(n),由于使用递归,会使用隐式栈空间,递归深度可能达到n层。

ListNode* reverseList(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode *p = reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return p;
}

【剑指Offer】面试题24. 反转链表的更多相关文章

  1. 剑指Offer&colon;面试题16——反转链表&lpar;java实现&rpar;

    问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...

  2. C&plus;&plus;版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列&lpar;的判断&rpar; 题解

    剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...

  3. 剑指Offer - 九度1518 - 反转链表

    剑指Offer - 九度1518 - 反转链表2013-11-30 03:09 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试 ...

  4. 剑指Offer面试题:14&period;链表的倒数第k个节点

    PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...

  5. 剑指offer 面试题35&period;复杂链表的复制

    时间O(N),空间O(N) /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomList ...

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

    题目描述 输入一个链表,反转链表后,输出链表的所有元素. 题目分析 至少需要三个指针pPre(指向前一个结点).pCurrent(指向当前的结点,在代码中就是pHead).pPnext(指向后一个结点 ...

  7. 剑指offer十五之反转链表

    一.题目 输入一个链表,反转链表后,输出链表的所有元素. 二.思路 详细分析见代码注释 三.代码 public class Solution {     public ListNode Reverse ...

  8. 【剑指Offer】15、反转链表

      题目描述:   输入一个链表,反转链表后,输出新链表的表头.   解题思路:   本题比较简单,有两种方法可以实现:(1)三指针.使用三个指针,分别指向当前遍历到的结点.它的前一个结点以及后一个结 ...

  9. 【剑指offer 面试题15】链表中倒数第K个结点

    思路: 定义两个指针同时指向head,第一个指针先走K-1步,随后二个指针同时移动,当第一个指针到末尾处时,第二个指针所指向的即为倒数第K个结点. #include <iostream> ...

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

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

随机推荐

  1. PHP CI框架 result&lpar;&rpar;详解

    该方法执行成功返回一个对象数组,失败则返回一个空数组. 一般情况下,我们使用下面的方法遍历结果,代码就像这样: $query = $this->db->query("要执行的 S ...

  2. hdu 1251 统计难题 &lpar;字典树入门题)

    /******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...

  3. iOS开发-二维码的基本使用

    二维码在生活中出现的频率越来越多了,大街小巷各个角落,它的出现更大的作用是代替功能单一的传统条形码,但是通常很多人第一次见到这个都不清楚这是干嘛用的.最初第一次见到可能就是买到的商品上有一个数字的条形 ...

  4. 大数据之nutch

    一.nutch简介 nutch是大名鼎鼎的Doug Cutting发起的爬虫项目,nutch孵化了现在大数据处理框架Hadoop.在nutch V 0.8.0 版本之前,Hadoop是nutch的一部 ...

  5. td的title属性

    今天才知道html元素td还有一个title属性,就是一个tooltip的东西,即当你把鼠标放在td上面的时候,会弹出一个提示语,这个提示语就是td的title. 把td的文本赋值给title: ht ...

  6. web&period;xml中常见配置解读

    文章转自:http://blog.csdn.net/sdyy321/article/details/5838791 有一般XML都必须有的版本.编码.DTD <web-app>下子元素&l ...

  7. JAVA多线程下载网络文件

    JAVA多线程下载网络文件,开启多个线程,同时下载网络文件.   源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...

  8. 转:Oracle EBS订单的流程&lpar;Order-&gt&semi;AR&rpar;

    目录(?)[-] 基本流程 创建订单 Pick Release Pick Confirm Ship Confirm Deliveries Interface Trip Stop - SRS Workf ...

  9. sql server数据库主键自增一插入特定值

    ID identity(1,1) SET IDENTITY_INSERT TableName ON INSERT TableName(ID) VALUES(110) SET IDENTITY_INSE ...

  10. 互联网组织的未来:剖析GitHub员工的任性之源(转)

    如果有这么家任性的公司,没有所谓“经理人”这一层,人都在做自己喜欢的事情,并且创造价值,而其他的事情,就顺其自然让他发生.这里能节省多少官僚主义带来的浪费?这样的公司得跑得有多快?得有多少无谓的冲突消 ...