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. Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...

  2. 【mybatis深度历险系列】mybatis的框架原理+入门程序解析

    在前面的博文中,小编介绍了springmvc的相关知识点,在今天这篇博文中,小编将介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和 ...

  3. 两种利用GCD实现分步获取结果的方式和SDWebImage缓存机制的验证

    前段时间写界面,因为数据的请求分成了两部分,所以用到了多线程,实现数据的分步请求,然后自己写了一个Demo,用两种方式实现分步获取内容,其中也包含了验证SDWebImage这个库的缓存机制,在这里给大 ...

  4. 国内外主流BI工具介绍和点评

    商业智能的应用在国外已广为普及,并且开始不断探索大数据和云技术.而国内,商业智能BI工具在这几年才开始慢慢被接受,企业开始有意识地建立一体化数据分析平台,为经营决策提供分析. 从国内企业使用情况来看, ...

  5. 自定义progressDialog(数据加载框)的实现

    大家在开发客户端时基本上都需要获取数据,在获取数据时会有一个等待状态,这时我们可以利用系统自带的progressDialog来向用户展示"数据正在加载中..."等等,但有时我们会觉 ...

  6. Dynamics CRM EXCEL导入数据字段类型为选项集时的注意事项

    在开始先展示下CRM的导入数据涉及选项集字段时的一个问题 下图是选项集字段的属性 下图是我要导入的excel中的列值,可以看出列明和字段名是一致的,而列值却不是选项集中已有的选项 在导入校验时,只要字 ...

  7. JQuery插件使用之Validation 快速完成表单验证的几种方式

    JQuery的Validation插件可以到http://plugins.jquery.com/上去下载.今天来分享一下,关于这个插件的使用. 简易使用 这第一种方式可谓是傻瓜式的使用,我们只需要按照 ...

  8. xlsx批量转为utf8的csv

    xlsx批量转为utf8的csv(金庆的专栏)策划的配置表为 xlsx 表格,可以有注释,公式.服务器和客户端使用的配置文件需要转成 csv 文件.使用 WPS 另存无法批量转换,并且结果不是utf8 ...

  9. Erlang application stop 调用死锁

    Erlang application stop 调用死锁(金庆的专栏)在application行为模块的start()中启动bson应用,在stop()中停止bson,结果application:st ...

  10. ActiveMQ安装配置及实例

    本文可作为吴水成老师,dubbo课程第21节的学习笔记. ActiveMQ的介绍及功能 参考百度 ActiveMQ的下载 https://activemq.apache.org/activemq-51 ...