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

反转单向链表

时间:2023-10-25 12:04:19浏览次数:29  
标签:head curr 反转 self 单向 None next 链表

反转单向链表

在编程语言中,链表是一种常用的数据结构。单向链表是一种线性数据结构,其中每个元素包含数据和一个指向下一个元素的指针。在某些情况下,可能需要反转单向链表。在Python中,可以使用迭代或递归方法来实现此操作。

递归方法

递归是一种在函数内部调用自身的编程技术。使用递归方法反转单向链表的基本思想是将链表分成两部分,然后递归地反转每一部分,最后将它们连接起来。

pythonclass ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def reverseList(head):
    if head is None or head.next is None:
        return head
    else:
        new_head = reverseList(head.next)
        head.next.next = head
        head.next = None
    return new_head
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def reverseList(head):
    if head is None or head.next is None:
        return head
    else:
        new_head = reverseList(head.next)
        head.next.next = head
        head.next = None
    return new_head

迭代方法

迭代方法是通过使用一个循环来反转链表。这种方法比递归方法更直观,因为它不需要处理额外的函数调用。

pythonclass ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def reverseList(head):
    prev = None
    curr = head
    while curr is not None:
        next_temp = curr.next 
        curr.next = prev 
        prev = curr 
        curr = next_temp 
    return prev 
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def reverseList(head):
    prev = None
    curr = head
    while curr is not None:
        next_temp = curr.next 
        curr.next = prev 
        prev = curr 
        curr = next_temp 
    return prev

这两种方法都可以有效地反转单向链表。递归方法更简洁,但如果链表很长,可能会导致栈溢出。迭代方法则不会有这个问题,因此在实际使用中,应根据链表的长度和具体情况选择合适的方法。

反转单向链表_迭代


标签:head,curr,反转,self,单向,None,next,链表
From: https://blog.51cto.com/u_15288375/8016320

相关文章

  • 面试必刷TOP101:12、单链表的排序
    一、题目publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@paramheadListNode类theheadnode*@returnListNode类*/publicListNodesortInList(ListNodehead){......
  • 灯塔--链表的学习
    双链表双链表的存储结构typedefstructDNode{ //定义双链表的节点类型 ElemTypedata; //数据域 structDNode*prior,*next;}DNode,*DLinkList;双链表的初始化boolInitDLinkList(DLinkList&L){DNodep=(DNode*)malloc(sizeof(DNode));if(L==NULL)retur......
  • 面试必刷TOP101:11、链表相加(二)
    一、题目二、题解反转链表:publicListNodeaddInList(ListNodehead1,ListNodehead2){//进行判空处理if(head1==null)returnhead2;if(head2==null){returnhead1;}//反转h1链表head1......
  • 数据结构之链表(Java)
    一:概述数组是严格的正规军,那么链表就是灵活多变的地下党链表是一种在物理上非连续、非顺序的数据结构,由若干节点(node)所组成单向链表的每一个节点又包含两部分,一部分是存放数据变量的data,另一部分是指向下一节点的指针next.二:链表的具体说明<1>链表的基本操作总括*链表的基......
  • 合并 K 个升序链表
     例如在一个数组里存放几组链表,要解决按照升序合并这几个链表可以按照合并两个链表的思想,比较val大小,小的被链接,然后指针后移,但由于是数组所以需要遍历找到最小的几组链表里最小的那个节点,以及在数组中的位置,其方法就是按照链表特性每次比较子数组的中的head节点,即例如lists[0]......
  • 链表理论部分
    链表理论部分什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针)、最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。如图所示:链表的类型接下来说一下链表的......
  • 01_移除链表元素
    移除链表元素题意:删除链表中等于给定值val的所有节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head=[7,7,7,7],val=7输出:[]203.移除链表元素实现代码如下:(本代码是通过带头节点的单链表来实现......
  • LeetCode | 19. 删除链表的倒数第 N 个结点
    1相关标签链表、双指针、C语言2报错情况2.1题目给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。2.2错误代码/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNo......
  • 7. 整数反转
    目录题目法一、直接解法二、数学解法题目给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1],就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示......
  • 编程导航算法通关村第 1 关 | 链表
    1.前置知识补充内容引用:https://www.hello-algo.com/数据结构数据结构如同一副稳固而多样的框架。它为数据的有序组织提供了蓝图,使算法得以在此基础上生动起来。分类1.根据逻辑类型分类逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照顺序依次排列,体现......