首页 > 其他分享 >翻转链表常用写法

翻转链表常用写法

时间:2024-10-17 15:11:42浏览次数:1  
标签:head prev ListNode next 链表 now 写法 翻转

翻转链表常用写法

循环写法

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *prev = nullptr, *next = nullptr, *now = head;
        while(now) {
            next = now->next;
            now->next = prev;
            prev  = now;
            now = next;
        }
        return prev;
    }
};

因为最后now会移动到nullptr,所以需要返回prev

递归写法


class Solution {
   public:
    ListNode* reverseList(ListNode* head) {
        if (!head || !head->next) {
            return head;
        }
        ListNode* fa = reverseList(head->next);
		head->next->next = head;
		head->next = nullptr;
		return fa;
    }
};

注意边界条件不仅仅是!head->next 还要加上!head来应对输入链表为空的情况,其他情况下只有一个特判条件都不会有问题;但是如果输入链表为空,就会试图访问nullptr的next,导致runtime error。

标签:head,prev,ListNode,next,链表,now,写法,翻转
From: https://www.cnblogs.com/smartljy/p/18472367

相关文章

  • 在盲解卷中,解卷积时滤波器系数翻转,平移与信号相乘再相加。另一种是信号翻转,平移与滤波
    在盲解卷积中,有两种基本的方法来处理信号和滤波器系数:一种是将滤波器系数翻转、平移与信号相乘再相加,另一种是将信号翻转、平移与滤波器系数相乘再相加。这两种方法的区别主要在于处理信号和滤波器的顺序,以及它们对最终结果的影响。1.**滤波器系数翻转(FilterCoefficientFli......
  • 24. 两两交换链表中的节点
    给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]解题思路:1.递归方法实现节点对的交换......
  • 链表C++
    #include<iostream>#include<stdexcept>usingnamespacestd;#defineeleTypeintstructListNode{ eleTypem_data; ListNode*next; ListNode(eleTypedata) { m_data=data; next=NULL; }};classLinkedlist{private: ListNode*head; ......
  • 一种失传已久的 SQL 多表连接查询,你从来没有见过的独门写法。
    阅读本文之前,请投票支持这款全新设计的脚手架,让Java再次伟大!从LeftJoin说起假设你有这样一个n2n的关系表,代表用户和角色之间的关系。通常通过leftjoin去连接这三张表,来查询出用户及其角色的信息。SELECTu.idASuser_id,u.nameASuser_name,......
  • 算法-二叉树展开单链表
    这道题我们可以利用栈来做,利用栈先进后出的特性每次先加入右节点再加入左节点,这样的话弹出的时候正好左节点在前面,右节点在后面满足题目要求。然后至于是构造单链表,我们可以用一个prev节点prev的left永远都是null而prev的right永远都等于cur 因为每次curr都是栈内弹出来......
  • 【数据结构】自己动手写一个C++链表功能
    链表数据结构在操作数据时具有更高的性能,但同时因为其结构的原因会造成时间复杂度为O(N),因此理解链表结构的底层实现能够让我们在开发中对程序的性能进行进一步优化。如果你不知道什么是链表或者时间复杂度,可以参考我另外两篇文章:【数据结构】数组、链表、堆栈、队列到......
  • C语言手撕实战代码_线索二叉树_先序中序线索二叉树_树的先根遍历_后根遍历_树的度_孩
    文章目录1.设计算法构造一棵先序线索二叉树2.先序线索二叉树的先序遍历算法3.设计算法构造一棵中序线索二叉树4.遍历中序线索二叉树5.树的先根遍历和后根遍历6.树T的叶子结点个数7.计算一棵以孩子兄弟表示的树T的度,该算法的时间复杂度为O(n)8.计算树孩子兄弟链表表示的T......
  • 专题:链表(已完结)
    1.移除链表元素就是续签prenodecurnode需要注意本地使用虚拟头节点逻辑更加简单/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val......
  • 合并两个排序的链表
    输入两个链表,并将它们的值按照递增的顺序合并成一个新的链表。题目要求如下:  我们可以创建两个新的链表,其中一个作为中间变量来存储合并后的链表,另一个链表记录中间链表并作为返回值返回。代码如下:/***structListNode{* intval;* structListNode*next;*}......
  • 单链表的基本概念
    单链表的定义typedefstructLNode{intdata;structLNode*next;//定义一个指向结构体自身的指针,用来指向下一个节点}LNode,*LinkList;_____________________________________________LNode*p=LinkListp;//两种定义指针的形式,侧重点不......