全部

[抄题]:

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. golang web框架 beego 学习 (一) 环境搭建

    下面的命令我都是在$GOPATH的路径下执行的: 1. 首先下载beego框架: go get github.com/astaxie/beego (注意:运行上面命令时没有反应,需要在etc/host ...

  2. JDK1.5多线程提高

    1.名词: 1.任务的执行与任务的提交解耦 2.任务的执行策略-可中断,取消 2.线程封闭机制: 针对单线程池而言,提高任务执行的速度,但是无需锁定 3.饥饿死锁: 任务长期得不到执行,其实就是形成闭 ...

  3. ELK配置过程初次安装使用心得--elasticsearch5.4版--及logstash

    安装所遇到的问题:http://www.bubuko.com/infodetail-1889252.html 一,先创建用户和组groupadd es useradd -g es es passwd  ...

  4. leetcode933

    public class RecentCounter { Queue<int> Q; public RecentCounter() { Q = new Queue<int>() ...

  5. PHP 生成Word文档

    <?php class word { function start() { ob_start(); echo '<html xmlns:o="urn:schemas-micros ...

  6. 突破MSDE 的2GB数据限制

    Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\ ...

  7. jboss 异常处理

    异常: jboss.aop:service=AspectManager 15:19:46,361 ERROR [ScannerThread] [MainDeployer] org.jboss.depl ...

  8. Java 8 日期时间API

    Java 8一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期; 在介绍本篇文章内容之前,我们先来讨论Jav ...

  9. 第一模块第一章 review

    ---恢复内容开始--- 练习题: 1.简述编译型与解释型语言的区别,且分别列出你知道的那些属于编译型,哪些属于解释型 机器语言:由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称 ...

  10. vue基础——vue介绍

    声明式渲染——文本插值: 数据和dom已经进行了关联,所有东西都是响应式的 index.html <div id="app0"> {{message}} </di ...