力扣每日一道系列 --- LeetCode 206. 反转链表

这篇具有很好参考价值的文章主要介绍了力扣每日一道系列 --- LeetCode 206. 反转链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


力扣每日一道系列 --- LeetCode 206. 反转链表,LeetCode每日一道,leetcode,链表,算法

📷 江池俊: 个人主页
🔥个人专栏: ✅数据结构探索 ✅LeetCode每日一道
🌅 有航道的人,再渺小也不会迷途。

LeetCode 206. 反转链表

力扣每日一道系列 --- LeetCode 206. 反转链表,LeetCode每日一道,leetcode,链表,算法
力扣每日一道系列 --- LeetCode 206. 反转链表,LeetCode每日一道,leetcode,链表,算法

思路一:头插

  1. 初始化两个指针,curnewheadcur 指向给定的链表头节点,newhead 初始为 NULL
  2. cur 不为空的情况下,执行循环。
    • 首先,记录下 cur 的下一个节点 next
    • 然后,将 curnext 指针指向 newhead,实现当前节点 cur 逆序接入新链表。
    • 接着,将 newhead 指向 cur,以便下一次循环时,newhead 就能指向新链表的下一个节点。
    • 最后,将 cur 移动到下一个节点。
  3. cur 为空时,说明已经遍历完整个链表,此时 newhead 就是反转后的链表头,返回 newhead

头插法的好处是无需遍历链表就可以直接修改指针关系,实现反转。时间复杂度为 O(n),空间复杂度为 O(1)

 //头插法
struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode* cur = head;
    struct ListNode* newhead = NULL;

    while (cur)
    {
        struct ListNode* next = cur->next;
        cur->next = newhead;
        newhead = cur;
        cur = next;
    }
    return newhead;
}

思路二:原地改变节点指向

  1. 定义三个指针 n1、n2 和 n3n1 初始为 NULLn2 初始指向链表头节点,n3 初始为 n2 的下一个节点。
  2. 使用 while 循环,遍历链表。在每次循环中,做以下操作:
    • n2next 指针指向 n1,实现 n2 节点的指向反转。
    • n1、n2n3 分别向后移动一个节点。具体地,将 n1 指向 n2,将 n2 指向 n3,将 n3 指向 n3 的下一个节点。
  3. n2 为空时,说明已经遍历完整个链表,此时 n1 就是反转后的链表头,返回 n1

这个算法的优点是只需要遍历一次链表就能完成反转操作,时间复杂度为 O(n),空间复杂度为 O(1)文章来源地址https://www.toymoban.com/news/detail-756925.html

 //原地改变节点的指向
  struct ListNode* reverseList(struct ListNode* head) {
      if(head==NULL)
      {
          return NULL;
      }
      struct ListNode* n1 = NULL;
      struct ListNode* n2 = head;
      struct ListNode* n3 = n2->next;

      while(n2)
      {
          n2->next = n1;

          n1 = n2;
          n2 = n3;
          if(n3)
              n3 = n3->next;
      } 
      return n1;
  }

到了这里,关于力扣每日一道系列 --- LeetCode 206. 反转链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 力扣每日一道系列 --- LeetCode 88. 合并两个有序数组

    📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构探索 ✅LeetCode每日一道 🌅 有航道的人,再渺小也不会迷途。 LeetCode 88. 合并两个有序数组 首先创建一个临时数组,其大小为第一个数组的大小(即nums1Size),其作用主要是。 通过循环遍历两个数组,将两个数组元素比较后较

    2024年02月04日
    浏览(36)
  • 力扣206. 反转链表

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 示例 2: 示例 3: 提示: 链表中节点的数目范围是 [0, 5000] -5000 = Node.val = 5000 进阶: 链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题? 如果再定义一个新的链表,实现链表元素

    2024年02月16日
    浏览(21)
  • 反转链表-力扣206

    2024年02月16日
    浏览(21)
  • 每日一题 206反转链表

    给你单链表的头节点  head  ,请你反转链表,并返回反转后的链表。 示例 1: 示例 2: 示例 3:

    2024年02月13日
    浏览(23)
  • LeetCode:206. 反转链表

    力扣链接

    2024年01月15日
    浏览(29)
  • leetcode 206.反转链表

    ✨链接:数据结构-手撕单链表+代码详解。 🌟 leetcode链接:反转链表 1️⃣ 代码: 2️⃣ 代码:

    2024年02月12日
    浏览(26)
  • LeetCode 206 - 反转链表

    给定一个单链表的头节点 head ,反转该链表并返回反转后的链表。 我们可以使用迭代或递归的方式来反转链表。 迭代法 初始化三个指针 cur 、 pre 和 next 。 遍历链表,将 cur.next 指向 pre ,然后将 pre 和 cur 向前移动一步。 重复上述步骤,直到 cur 到达链表末尾。 递归法 递归

    2024年01月15日
    浏览(25)
  • 链表反转-LeetCode206

    题目: 给你单链表的头结点head,请反转链表,并返回反转后的链表。 示例: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 1、建立虚拟头结点辅助反转 分析链表插入元素的时候,会发现如何处理头结点是个比较麻烦的问题,为此可以先建立一个虚拟的结点ans,并且令a

    2024年02月07日
    浏览(30)
  • 206. 反转链表、Leetcode的Python实现

    博客主页:🏆 看看是李XX还是李歘歘  🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗 点关注不迷路,总有一些📖知识点📖是你想要的 💗 ⛽️今天的内容是      Leetcode    206. 反转链表     ⛽️💻💻💻 206. 反转链表 给你单链表的头节点 

    2024年02月06日
    浏览(25)
  • 反转链表 Java版 图文并茂思路分析带答案(力扣第206题)

    力扣第206题 我们不只是简单的学习(背诵)一个数据结构,而是要分析他的思路,以及为什么要有不同的指针等等 思路分析:首先要链表有个头指针没有任何问题 然后,我们要将1的下一个节点指向空,这样才能将其反转过来,但是这个时候我们发现和下一个节点2失去了联

    2024年02月05日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包