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

反转链表

时间:2024-03-18 14:34:43浏览次数:19  
标签:head return 反转 self next 链表 节点

描述
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围:0 ≤ n ≤ 1000
要求:空间复杂度O(1),时间复杂度O(n), 如当输入链表{1,2, 3}时,经反转,原链表变为{3, 2, 1},所以对应输出为{3,2,1}.以上转换过程如下图所示:

实例1:

输入:{1,2,3}
返回值:{3,2,1}

实例2:

输入:{}
返回值:{}
说明:空链表则输出空

分析:

单链表的定义如下:

# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

首先判断当前节点和下一个节点是否为NULL,尤其是第二个节点,如果第二个节点是NULL,则返回当前节点,那么,使用递归函数,参数为head.next,也就是说链表值会一直往后传递,直到最后一个节点,此时因为head.next为NULL,返回当前节点。
代码:

class Solution:
  def reverseList(self, head: ListNode) -> ListNode:
     if not head:
       return None
     if not head.next:
       return head
     headNode = self.reverseList(head.next)
     head.next.next = head
     head.next = None
     return headNone

标签:head,return,反转,self,next,链表,节点
From: https://www.cnblogs.com/bonne-chance/p/18080323

相关文章

  • [Java·算法·中等] LeetCode21. 合并两个有序链表
    人不走空                                          ......
  • 构建链表
    链表 typedefstructmsgdata{charmsgtype;chartext[27];}link_data;typedefstructmsglist{link_datadata;structmsglist*next;}linknode,*linklist;   创建链表思路:首先创建两个结点,即头结点和尾结点;然后创建一个函数:在函数内创建一......
  • 双向链表
    rt_inlinevoidrt_list_init(rt_list_t*l){l->next=l->prev=l;}/***@briefinsertanodeafteralist**@paramllisttoinsertit*@paramnnewnodetobeinserted*/rt_inlinevoidrt_list_insert_after(rt_list_t*l,rt_list_t*n){......
  • 链表 Linked List
    2024.3.15芝士wa参考视频:bilibli-数据结构-链表“印度小哥讲得真好”链表对于链表来说,存储数据需要两个部分,一是数据本身,二是指针,该指针指向下一个数据的地址,依次链接,直到最后一个元素,指针指向空(NULL)遍历的时间复杂度为O(n)插入的时间复杂度为O(n)删除的时间复......
  • 5.合并两个有序链表
    链表合并B站左程云讲解连接链表结构publicstaticclassListNode{publicintval;publicListNodenext;publicListNode(intval){this.val=val;}publicListNode(intval,ListNodenext){......
  • leetcode 21 合并两个有序链表
    https://www.bilibili.com/video/BV1xa411A76q?p=4&vd_source=cdfcf738e0429ec2cffe4778dd8dd0e4 #迭代#https://blog.csdn.net/m0_61661179/article/details/127205244classSolution:defmergeTwoLists(self,list1:Optional[ListNode],list2:Optional[List......
  • 数据结构(二)双链表---以题为例
    实现一个双链表,双链表初始为空,支持 5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k 个插入的数删除;在第 k 个插入的数左侧插入一个数;在第 k 个插入的数右侧插入一个数现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第 ......
  • 滴水逆向笔记系列-c++总结4-41.new-delete-vector-42.链表
    第四十课c++8new-delete-vector1.内存空间复习在类外函数外的变量就是全局变量,程序一编译地址就已经确定了的临时数据,参数和局部变量就是在堆栈里而使用malloc函数动态申请的则是在堆里2.跟踪调试反汇编函数我们调用malloc函数申请内存,但是不是malloc一个函数完成整个......
  • 解释一下Spring中的IoC(控制反转)和DI(依赖注入)是什么,它们之间有何关系?Spring的Bean的生
    解释一下Spring中的IoC(控制反转)和DI(依赖注入)是什么,它们之间有何关系?在Spring框架中,IoC(控制反转)和DI(依赖注入)是两个核心概念,它们对于实现松耦合和高度可配置的应用程序至关重要。IoC(控制反转):IoC,即控制反转,是一种设计思想,其核心思想是将原本由代码直接操控的对象的调用权交......
  • 141. 环形链表c
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/boolhasCycle(structListNode*head){structListNode*slow=head;structListNode*fast=head;while(fast&&fast->......