首页 > 其他分享 >206.反转链表

206.反转链表

时间:2023-10-28 16:34:21浏览次数:40  
标签:ListNode 206 反转 next 链表 text 节点 rightarrow

1.题目介绍

2.题解

2.1 迭代

假设链表为 1→2→3→∅,我们想要把它改成 ∅←1←2←3。
在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

作者:力扣官方题解
链接:https://leetcode.cn/problems/reverse-linked-list/solutions/551596/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

代码

//
// Created by trmbh on 2023-10-28.
//
#include <iostream>
struct ListNode {
 int val;
 ListNode *next;
 ListNode() : val(0), next(nullptr) {}
 ListNode(int x) : val(x), next(nullptr) {}
 ListNode(int x, ListNode *next) : val(x), next(next) {}
};

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *dummy = new ListNode(0); //使用虚拟头结点 辅助存储下一节点
        ListNode *pre = nullptr; //存储前一节点
        ListNode *curr = head; //存储当前节点
        while (curr){
            dummy -> next = curr -> next; //记住下一个节点
            curr -> next = pre;  //修改当前节点指向方向
            pre = curr; //当前节点变为下次循环的前一个节点
            curr = dummy -> next; // 更改当前节点位置
        }
        return pre; // 此时当前节点已经指向nullptr,前一节点pre即为所需
    }
};

int main(){
    ListNode l1(5);
    ListNode l2(4, &l1);
    ListNode l3(3, &l2);
    ListNode l4(2, &l3);
    ListNode head(1, &l4);
    Solution solution;
    ListNode *h = solution.reverseList(&head);
    auto p = h;
    while (p){
        std::cout << p->val << ' ' ;
        p = p->next;
    }
}

复杂度分析

时间复杂度:O(n),其中 n 是链表的长度。需要遍历链表一次。
空间复杂度:O(1)。

2.2 递归

递归版本稍微复杂一些,其关键在于反向工作。假设链表的其余部分已经被反转,现在应该如何反转它前面的部分?
$\text{假设链表为:}\quad n_1\rightarrow\ldots\rightarrow n_{k-1}\rightarrow n_k\rightarrow n_{k+1}\rightarrow\ldots\rightarrow n_m\rightarrow\varnothing $

\(\text{若从节点 }n_{k+1}\text{ 到 }n_m\text{ 已经被反转,而我们正处于 }n_k\text{。}\)
\(n_1\rightarrow\ldots\rightarrow n_{k-1}\rightarrow n_k\rightarrow n_{k+1}\leftarrow\ldots\leftarrow n_m\)

\(\text{我们希望 }n_{k+1}\text{ 的下一个节点指向 }n_k.\)
\(\text{所以,}n_k.next.next=n_k\text{。}\)

需要注意的是 \(n_1\) 的下一个节点必须指向 \(\varnothing\)。如果忽略了这一点,链表中可能会产生环。

标签:ListNode,206,反转,next,链表,text,节点,rightarrow
From: https://www.cnblogs.com/trmbh12/p/17794233.html

相关文章

  • Python数据结构——链表
    链表(LinkedList)是一种基本的数据结构,用于组织和管理数据。它是由一系列节点(Node)组成的数据结构,每个节点包含一个数据元素和指向下一个节点的引用。链表是一种非线性数据结构,与数组不同,它可以根据需要动态分配内存。什么是链表?链表是由节点组成的数据结构,每个节点包含两部分:数据元......
  • 数据结构与算法(LeetCode) 第二节 链表结构、栈、队列、递归行为、哈希表和有序表
    一、链表结构1.单向链表节点结构publicclassNode{ publicintvalue;publicNodenext;publicNode(intdata){value=data;}}2.双向链表节点结构publicclassDoubleNode{publicintvalue;publicDoubleNodelast;publicDouble......
  • 面试必刷TOP101:15、删除有序链表中重复的元素-I
    题目题解importjava.util.*;publicclassSolution{publicListNodedeleteDuplicates(ListNodehead){//空链表if(head==null)returnnull;//遍历指针ListNodecur=head;//指针当前和下一位不为空......
  • day 3 链表 203.移除链表元素、707.设计链表、206.反转链表
    203.移除链表元素题目链接:203.移除链表元素视频教程文字教程虚拟头节点虚拟头节点的目的:消除头节点的特殊性痛点:删除头节点和删除其他节点的操作是不一样的,导致写代码时需要分两种情况考虑因为其他链表都是通过前一个节点删除的而头节点没有前一个节点,只需将头节点向......
  • 151. 反转字符串中的单词
    给你一个字符串s,请你反转字符串中单词的顺序。单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。注意:输入字符串s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回......
  • 代码随想录第三天 | 203.移除链表元素 707.设计链表 206.反转链表
    第一题:https://leetcode.cn/problems/remove-linked-list-elements/我一开始打算是搞先判断第一个节点是不是,如果不是就作为头节点来着,不过后来一想觉得太麻烦了,仔细一看题目发现居然已经提供了模拟头节点的方法,就用了呗GPT3.5:那你我的想法有颇多相似之处啊.jpg第二题:https://l......
  • 双向链表的建立和使用场景
    双向链表(DoublyLinkedList)是一种常见的数据结构,它在链表的基础上增加了一个指向前一个节点的指针,这使得在双向链表中可以方便地进行双向遍历。创建双向链表的步骤:定义节点类:首先,定义一个节点类,这个节点类通常包含三个属性:数据域(存储数据的部分)、指向下一个节点的指针(通常称为n......
  • 04_两两交换链表中的节点
    两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。【思路】/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*......
  • 面试必刷TOP101:13、判断一个链表是否为回文结构
    一、题目二、题解2.1方法一使用list列表因为需要判断是否为回文结构,所以要比较头尾的数据,而链表无法随机查询数据,所以可以先将链表转换成list。具体步骤首先初始化一个list列表;遍历链表,将链表中的值转移至list中;在list中通过比较头尾的值来判断链表是否为回文结构。代码如下:import......
  • 03_反转链表
    反转链表给你单链表的头节点head,请你反转链表,并返回反转后的链表。力扣题目链接示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[]提示:链表中节点的数目范围是[0,5000]-5000<=Node.val<=5000思......