1. Reverse Linked List

  题目链接

  题目要求:

  Reverse a singly linked list.

  Hint:

  A linked list can be reversed either iteratively or recursively. Could you implement both?

  初想用递归来实现应该会挺好的,但最终运行时间有点久,达到72ms,虽然没超时。具体程序如下:

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
 ListNode* recurList(ListNode* p)
{
if (p->next != NULL)
{
ListNode* tmp = p->next;
if (tmp->next == NULL)
{
tmp->next = p;
p->next = NULL;
return tmp;
}
} ListNode* ret = recurList(p->next);
ListNode* tmp = ret;
while (tmp->next != NULL)
tmp = tmp->next;
tmp->next = p;
p->next = NULL;
return ret;
} ListNode* reverseList(ListNode* head) {
if (head == NULL || head->next == NULL)
return head; ListNode* tail = recurList(head);
return tail;
}

  在LeetCode论坛发现了一个8ms的解法,不得不为其简洁高效合彩!具体程序如下:

 ListNode* reverseList(ListNode* head) {
ListNode *curr = head, *prev = nullptr;
while (curr) {
auto next = curr->next;
curr->next = prev;
prev = curr, curr = next;
}
return prev;
}

  2. Reverse Linked List II

  题目链接

  题目要求:

  Reverse a linked list from position m to n. Do it in-place and in one-pass.

  For example:
  Given 1->2->3->4->5->NULLm = 2 and n = 4,

  return 1->4->3->2->5->NULL.

  Note:
  Given mn satisfy the following condition:
  1 ≤ m ≤ n ≤ length of list.

  该题的解法可以将一个链表分成三个部分,即1~m-1、m~n、n+1~最后一个元素3个部分,且仅对中间部分进行翻转,最后再将这3个部分合并。具体程序如下:

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(!head || !head->next || m >= n)
return head; ListNode *start = head;
ListNode *preList = nullptr, *postList = nullptr; int k = ;
while(k < m)
{
preList = start;
start = start->next;
k++;
} ListNode *prev = nullptr;
while(k <= n)
{
if(k == n)
postList = start->next;
auto next = start->next;
start->next = prev;
prev = start;
start = next;
k++;
} ListNode *end = prev;
while(end && end->next)
end = end->next; if(preList)
preList->next = prev;
else
head = prev;
end->next = postList; return head;
}
};

LeetCode之“链表”:Reverse Linked List && Reverse Linked List II的更多相关文章

  1. LeetCode之“链表”:Intersection of Two Linked Lists

    此题扩展:链表有环,如何判断相交? 参考资料: 编程判断两个链表是否相交 面试精选:链表问题集锦 题目链接 题目要求: Write a program to find the node at whic ...

  2. 【LeetCode】9 & 234 & 206 - Palindrome Number & Palindrome Linked List & Reverse Linked List

    9 - Palindrome Number Determine whether an integer is a palindrome. Do this without extra space. Som ...

  3. LeetCode之“链表”:Reverse Nodes in k-Group

    题目链接 题目要求: Given a linked list, reverse the nodes of a linked list k at a time and return its modifi ...

  4. [Linked List]Reverse Nodes in k-Group

    Total Accepted: 48614 Total Submissions: 185356 Difficulty: Hard Given a linked list, reverse the no ...

  5. LeetCode解题报告:Linked List Cycle && Linked List Cycle II

    LeetCode解题报告:Linked List Cycle && Linked List Cycle II 1题目 Linked List Cycle Given a linked ...

  6. 【LeetCode】430. Flatten a Multilevel Doubly Linked List 解题报告(Python)

    [LeetCode]430. Flatten a Multilevel Doubly Linked List 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: ...

  7. [LeetCode] 344 Reverse String && 541 Reverse String II

    原题地址: 344 Reverse String: https://leetcode.com/problems/reverse-string/description/ 541 Reverse Stri ...

  8. LeetCode 单链表专题 (一)

    目录 LeetCode 单链表专题 <c++> \([2]\) Add Two Numbers \([92]\) Reverse Linked List II \([86]\) Parti ...

  9. LeetCode之链表

    2. Add Two Numbers You are given two linked lists representing two non-negative numbers. The digits ...

  10. leetcode 单链表相关题目汇总

      leetcode-19-Remove Nth From End of List—移除链表中倒数第n个元素 leetcode-21-Merge Two Sorted Lists—两个已排序链表归并 ...

随机推荐

  1. 递归dict

    一个看起来非常酷的定义 class Example(dict): def __getitem__(self, item): try: return dict.__getitem__(self, ite ...

  2. 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法

    几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...

  3. 全文检索概念,Lucene大致结构

    1.1 常见的全文检索 1) 在window系统中,可以指定磁盘中的某一个位置来搜索你想要得到的东西. 2) 在myeclipse中,点击Help->Help Contents,可以利用搜索功能 ...

  4. ROS常用三維機器人仿真工具Gazebo教程匯總

    參考網址: 1. http://gazebosim.org/tutorials 2. http://gazebosim.org/tutorials/browse Gazebo Tutorials Ga ...

  5. Linux命令—文件目录

     (1) shell的使用 <1>检查系统当前运行的shell版本: [root@lab root]# echo $SHELL <2>从当前shell下切换到csh: [r ...

  6. 2.QT中使用资源文件,程序打包

     1 程序中使用资源文件 A  一个QT空项目 B  右击项目,添加新文件 添加后的效果是 C  右击main.prc,选择"添加现有项",找到要使用的资源文件.最终的效果是: ...

  7. SSH深度历险(九) Struts2+DWZ+Uploadify实现多文件(文件和图片等等)上传

    在gxpt_uas系统中,要实现文件(文件和图片等等,可以灵活配置)的批量上传至mongodb,在学习这个过程中,学习了mongodb,并实现了批量上传的功能,实现思路:在DWZ的基础上参考官方的实例 ...

  8. Android开发学习之路--Service之初体验

    android最后一个组件便是service了,终于学习到最后一个组件了,从年前的开发环境的搭建,到现在学到最后一个组件花了三周的时间,期间记录的点点滴滴,照着书本学习编写的代码都受益匪浅,这里要感谢 ...

  9. HashMap方法介绍

    1. Map的遍历方式 (1) for each map.entrySet() Map<String, String> map = new HashMap<String, Strin ...

  10. Android的actionBar的菜单使用-android学习之旅(四十三)

    ActionBar简介 ActionBar是3.0以后加入的新特性,可用于在顶部显示应用名称和标题.初次之外右边还可以显示活动项. ActionBar应用 ActionBar用法 <?xml v ...