算法通关村第二关——链表反转

这篇具有很好参考价值的文章主要介绍了算法通关村第二关——链表反转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

链表反转,就是链表原来是1->2->3->4->5,经过反转处理过后变成5->4->3->2->1

处理链表反转,有两种方式,一个是建立虚拟头结点,一个是直接操作链表反转。

1. 建立虚拟头结点

算法通关村第二关——链表反转,算法,链表,javascript

 这是执行的流程

最核心的两行就是

cur.next = ans.next;
ans.next = cur;

直接想我要让她反转,我现在设立了虚拟头结点,那我就要让新加进这个反转链表的结点的next为我反转链表中ans的next,再让ans的next设为当前结点,也就是我刚才处理的结点。

public static ListNode reverseList(ListNode head) {
    ListNode ans = new ListNode(-1);
    ListNode cur = head;
    while (cur != null) {
        ListNode next = cur.next;
        cur.next = ans.next;
        ans.next = cur;
        cur = next;
    }
    return ans.next;
}

这里我对于代码的理解是刚开始设立了ans,但是还没有将ans.next设为第一个结点1,是在第一次循环的时候做的,cur刚开始是原链表的1,循环中,

将cur.next也就是2先设立为next,让ans.next(null)给到cur.next,这里做的是让原链表头结点1的next为null,因为在反转之后,1作为链表的尾结点,next为null。

然后让cur(1)给到ans.next,就是让ans和1建立起了关联。

然后让next也就是原链表的头结点1的下一个结点,给到cur,在处理下一个结点。这样就实现了链表反转。

2. 直接在链表操作

这种也是要会的

算法通关村第二关——链表反转,算法,链表,javascript

 文章来源地址https://www.toymoban.com/news/detail-642381.html

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode next = curr.next;
        curr.next = prev;
        prev = curr;
        curr = next;
    }
    return prev;
}

到了这里,关于算法通关村第二关——链表反转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法通关村第二关——指定区间反转问题解析

    Leetcode92有这样一道题:给你单链表的头指针head和两个整数left、right,其中left=right,请你反转从位置left到位置right的链表结点,返回反转后的链表,如图所示: 这道题呢,有两种不同的解法,分别是头插法和穿针引线法,头插法就是我们前面说过的带头结点的反转,而穿针引

    2024年02月14日
    浏览(44)
  • 算法通关村第二关——K个一组反转

    前面有很多关于链表反转的知识,K个一组反转,就是让很多组节点进行翻转,本质也都是一样的。 现在的链表是 3-2-1-4-5-6-7-8 3-2-1已经进行了反转,现在要进行反转的是4-5-6 在这里首先计算出链表的长度,然后计算出要反转几组,现在定义pre为dummyNode,cur定义为head。 通过f

    2024年02月14日
    浏览(45)
  • 算法通关村第二关——终于学会链表

    LeetCode206 给我们单链表的头结点head,请你反转链表,并返回反转后的链表,如图所示: 本题有两种方法,分别为 建立虚拟头结点辅助反转 以及 直接操作链表实现反转 ,两种方法我将逐一分析讲解。 首先从名字分析一下这种方法,虚拟头结点,顾名思义,我们可以建立一个

    2024年02月15日
    浏览(43)
  • 算法村第二关(1)——手写链表反转

    题目:Leetcode-206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表 对于链表反转的问题,想起来其实非常简单。 就是从前往后,将节点一个一个采用头插法的做成一个新链表嘛,这样新链表就是旧链表的反转链表啦! 那既然这么简单,为什么还要学

    2024年02月14日
    浏览(39)
  • 算法通过村第二关-链表黄金笔记|K个一组反转

    提示:没有人天生就喜欢一种气味而讨厌另一种气味。文明的暗示而已。 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

    2024年02月14日
    浏览(43)
  • 算法通关村第十二关——字符串反转问题解析

    字符串反转是关于字符串算法里的重要问题,虽然不是太难,但需要考虑到一些边界问题。本篇文章就对几道字符串反转题目进行分析。 力扣344题,编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,

    2024年02月10日
    浏览(43)
  • 算法通关村第二关——单链表加一

    LeetCode369 用一个非空单链表来表示一个非负整数,然后将这个整数加一。你可以假设这个整数除了 0 本身,没有任何前导的 0.这个证书的各个数位按照 高位在链表头部、低位在链表尾部 的顺序排列。 计算是从低位开始的,而链表是从高位开始的,所以要处理就必须反转过来

    2024年02月14日
    浏览(44)
  • 算法通关村十二关 | 字符串前缀问题

    题目:LeetCode14,14. 最长公共前缀 - 力扣(LeetCode) 我们先看公共前缀有什么特点。 第一种方式,竖着比较,如图左边所示,选取数组中第一个字符串的位置,每前进一个就比较各个字符串,看是否相等,只有某一轮遇到不相等,则结束返回结果。 还是这张图         如

    2024年02月11日
    浏览(48)
  • 算法通关村第十二关-字符串基础题目

    思路:遍历字符串,将第i个字符和第N-i-1个字符串交换即可; 代码实现: 题目:反转字符串2 思路:每2k个一组,将其前k个字符反转,使用i+k与字符串长度n判断剩余字符串长度属于(0,k)还是 [k,2k)之间;然后按照要求剩余字符串即可; 代码实现: 题目:仅仅反转字母 思

    2024年01月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包