全部

[抄题]:

Reverse a singly linked list.

[思维问题]:

以为要用dummy node

[一句话思路]:

直接全部转过来就行了,用dummy node反而多余

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. return curt错了,应该是pre

[二刷]:

  1. 箭头左边就在等号左边,箭头右边就在等号右边
  2. 反正就是个模板

[总结]:

完全转过来之后,最早的prev应该是null

[复杂度]:Time complexity: O(1) Space complexity: O(1)

[英文数据结构,为什么不用别的数据结构]:

[其他解法]:

[Follow Up]:

[题目变变变]:

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curt = head; while(curt != null) {
ListNode temp = curt.next;
curt.next = prev;
prev = curt;
curt = temp;
}
return prev;
}
}

m~n

[抄题]:

[思维问题]:

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

千万别画错了!

[一刷]:

  1. 第一层corner case是m,n的关系,head本身就为空
  2. 用已经有的head表示m-1,能少定义一个变量。不要一下全定义了,要用的时候再定义。
  3. 先定义nNode 就是 mNode,然后对nNode操作就够了
  4. 翻转m-n用for循环就行了
  5. 一定要判断是否为空再.next
  6. ListNode premNode = head;声明和指定可以统一
  7. dummy是第一个节点,应该把head指向它,从它开始找
  8. 理解四部翻转法每一步的含义:存2next,当前反指,往后移 这道题里面只有m,postn需要移动
  9. if (head == null || m >= n)时,无法删除,还是要返回head
5->null
1
1---------5

[总结]:

链表的头尾衔接关系别画错了,不方便debug

[复杂度]:Time complexity: O(1) Space complexity: O(1)

[英文数据结构,为什么不用别的数据结构]:

linked list节约空间复杂度

[其他解法]:

[Follow Up]:

[题目变变变]:

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if (head == null || m >= n) {
return head;
} ListNode dummy = new ListNode(0);
dummy.next = head;
//search for m-1 th
head = dummy;
for(int i = 1; i < m; i++) {
if (head == null) {
return null;
}
head = head.next;
}
//reverse
ListNode premNode = head;
ListNode mNode = premNode.next;
ListNode nNode = mNode;
ListNode postnNode = nNode.next;
for (int i = m; i < n; i++) {
ListNode temp = postnNode.next;//2cun
postnNode.next = nNode;//hui
nNode = postnNode;//xia yi
postnNode = temp;
} //join up
mNode.next = postnNode;
premNode.next = nNode; return dummy.next;
}
}

翻转链表reverse linked list:全部,m~n的更多相关文章

  1. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  2. 反转链表 Reverse Linked List

    2018-09-11 22:58:29 一.Reverse Linked List 问题描述: 问题求解: 解法一:Iteratively,不断执行插入操作. public ListNode reve ...

  3. 链表-Reverse Linked List II

    [题目要求直接翻转链表,而非申请新的空间] 这道题的一个关键在于,当m=1时,需要翻转的链表段前没有其他的结点(leetcode的测试用例不含头结点),这个特例给解题带来了一点小小的困难.一个比较直观 ...

  4. [Swift]LeetCode25. k个一组翻转链表 | Reverse Nodes in k-Group

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k  ...

  5. [Swift]LeetCode206. 反转链表 | Reverse Linked List

    Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...

  6. K组翻转链表 · Reverse Nodes in k-Group

    [抄题]: 给你一个链表以及一个k,将这个链表从头指针开始每k个翻转一下.链表元素个数不是k的倍数,最后剩余的不用翻转. [思维问题]: [一句话思路]: // reverse head->n1 ...

  7. LeetCode 206:反转链表 Reverse Linked List

    反转一个单链表. Reverse a singly linked list. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3- ...

  8. 链表-Reverse Linked List

    /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * } ...

  9. leetcode 206 反转链表 Reverse Linked List

    C++解法一:迭代法,使用前驱指针pre,当前指针cur,临时后继指针nxt: /** * Definition for singly-linked list. * struct ListNode { ...

随机推荐

  1. Centos 的计划任务 crontab

    使用计划任务! crontab命令主要有3个参数: -e :编辑用户的crontab. -l :列出用户的crontab的内容. -r :删除用户的crontab的内容. 执行crontab -e,将 ...

  2. (jsp/html)网页上嵌入播放器(常用播放器代码整理) http://www.jb51.net/article/37267.htm

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助   这个其实很简单,只要在HTML上添加以上代码就O ...

  3. CentOS所有版本下载地址分享

    简述 CentOS(Community Enterprise Operating System - 社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux ...

  4. 一点ExtJS开发的感悟

    虽然项目一直采用ExtJS作为前端开发,接触到了一些ExtJS 的一些场景界面,自己也尝试封装一些组件,对于开发70%基本可以满足需求.遇到最为麻烦的就是Ext的模版或者直接拼接字符串再进行eval转 ...

  5. Python序列化和反序列化vsJSON

    # -*- coding: utf-8 -* """没有嵌套类的类 author: Jill usage: """ import json ...

  6. 31. Studio获取新的ID值方法

    var fun = ABS_LOADBEAN("com.plug.FunctionHelper");var vid1 = fun.utilHelper.getNextID(&quo ...

  7. 1. SVN clean失败解决方法

    svn执行clean up后出现提示:svn cleanup failed–previous operation has not finished; run cleanup if it was int ...

  8. 1.mybatis实战教程mybatis in action之一开发环境搭建

    转自:https://www.cnblogs.com/shanheyongmu/p/5652471.html 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框 ...

  9. .NET Framework 官方下载地址

    .net framwork 官方下载地址 3.5 https://www.microsoft.com/zh-cn/download/details.aspx?id=25150 .NET Framewo ...

  10. c++builder 代码模板 code templates

    c++builder6.0  MENU:Tools>Editor Options>Code Insight>Code templates XE6 c++builder D:\Prog ...