全部

[抄题]:

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. IntelliJ IDEA小问题解决方法------(持续更新)

    1:IDEA运行时报错提示“找不到或无法加载主类”:在确保IDEA开发环境无误后->file->invalidate Cache/restart,之后再重新build.问题解决. 2.如何 ...

  2. seaborn可视化特征的相关性

    import seaborn as sn sn.heatmap(trainX.corr(),vmax=1,square=True)

  3. php变量详细讲解

    变量是用于存储信息的"容器". 定义一个变量的语法: $变量名 = 值; 使用变量的例子: <?php $x=5; $y=6; $z=$x+$y; echo $z; ?> ...

  4. 如何分析 WindowsDump:Dump 起源与初始设置

    https://www.qcloud.com/community/article/511817 转者注:让我感觉以前看蓝屏都白看了~~~原来蓝屏也可以分析具体原因. 适用场景:Windows 系列系统 ...

  5. MS SQL Server 定时任务实现自动备份

    SQL Server Express 版本是没有SQL 代理服务的,从而导致不能使用SQL Server的定时自动备份功能.真心感觉这就是一个坑,虽然Express是学习的版本,但是精简的也太多了.另 ...

  6. 进程池----Pool(老的方式)----回调

    之后的进程池使用的是 ProcessPoolExecutor,它的底层使用的就是pool 为什么要有进程池?进程池的概念. 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星 ...

  7. php7---redis

    wget https://github.com/phpredis/phpredis/archive/php7.zip cd /usr/local/src/ phpredis-php7 /usr/loc ...

  8. 4.struts2的配置文件优先级

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在struts2中一些配置(比如常量)可以同时在struts-default ...

  9. reportng代替testng的默认报告——pom设置

    既然是maven项目,直接关注pom设置. 这篇写得很清楚了:maven+testng+reportng的pom设置 强调一点的是,guice必须依赖,就因这个卡了大半天. <dependenc ...

  10. mysql 修改用户密码

    修改mysql用户密码   目录 mysqladmin命令 UPDATE user 语句 SET PASSWORD 语句 root密码丢失的情况(待验证) mysqladmin命令(回目录) 格式如下 ...