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

206 反转链表

时间:2022-09-01 19:59:12浏览次数:97  
标签:pre head cur 206 反转 self None next 链表

题目206 反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:
输入:head = [1,2]
输出:[2,1]

示例 3:
输入:head = []
输出:[]

双指针思路:

  • 定义指针cur指向head,定义指针pre,定义为None,作为链表的最后节点的指向节点
  • 然后开始反转了,定义一个临时指针temp保存cur.next节点,因为反转后cur指针的next指向pre,不在是原先的cur.next节点了,将cur->next 指向pre,此时已经反转了第一个节点了。
  • 接下来,就是循环走如下代码逻辑了,继续移动pre和cur指针。
  • 最后,cur 指针已经指向了null,循环结束,链表也反转完毕了。 此时我们return pre指针就可以了,pre指针就指向了新的头结点。

注意:本来考虑head和head.next是否为空,最后发现为空也不影响结果。

代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        # if head != None and head.next != None:
        #     pre = None
        #     cur = head

        #     while cur != None:
        #         temp = cur.next
        #         cur.next = pre

        #         pre = cur
        #         cur = temp
        #     return pre
        # return head

        pre = None
        cur = head

        while cur != None:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        return pre

递归思路

建议双指针思路,递归直接不容易写,但是根据双指针代码,可以写出递归代码。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        # pre = None
        # cur = head

        # while cur != None:
        #     temp = cur.next
        #     cur.next = pre
        #     pre = cur
        #     cur = temp
        # return pre

        return self.reverse(None, head)
    def reverse(self, pre, cur):
        while cur != None:
            temp = cur.next
            cur.next = pre
            return self.reverse(cur, temp)
        return pre

标签:pre,head,cur,206,反转,self,None,next,链表
From: https://www.cnblogs.com/edkong/p/16647637.html

相关文章

  • 【算法】反转字符串
    前言研究算法能提高我们的编程功底,更好地编写出高效稳健的代码。今天,我们研究的是——反转字符串。//输入一个字符串,输出它的倒序字符串input:Hellooutput:olleH......
  • letcode算法--5.整数反转
    给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1],就返回0。假设环境不允许存储......
  • 61. 旋转链表
    61.旋转链表给你一个链表的头节点head,旋转链表,将链表每个节点向右移动 k 个位置。 示例1:输入:head=[1,2,3,4,5],k=2输出:[4,5,1,2,3]示例2:输入:hea......
  • 前端也该刷点算法题——双指针解“链表”题也太香了叭!
    双指针解“链表”题也太香了叭!同步双指针1查找链表中倒数第k个节点剑指Offer22.链表中倒数第k个节点思路:假设链表的长度为n,不难得出倒数第k个节点即为整数第n+......
  • leetcode 1019. 链表中的下一个更大节点 js实现
    给定一个长度为 n 的链表 head对于列表中的每个节点,查找下一个更大节点的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值严格大于它的值。返回......
  • NowCoder BM1 反转链表
    描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。NowCoderBM1反转链表importjava.util.*;/*public......
  • Javascript中的链表
    Javascript中的链表数据结构的介绍文章。链表概念与应用于Javascript语言的实际示例。介绍数据结构是一种有效处理大量数据的手段,了解它的结构和组成为我们提供了更......
  • 2022-08-30 V形反转
     纳斯达克指数先看一下大周期,这里日线是一笔下跌30分钟是一段下跌,30分钟这一段开始不流畅之后,出现的最后一笔,在下图  这是1分钟图,这里看1分钟的一笔下跌,出现极......
  • 数据结构之链表的原理
    链表:在计算机中用一组任意的存储单元存储线性表的数据元素称为链式存储结构,这组存储结构可以是连续的,也可以是不连续的,因此在存储数据元素时可以动态分配内存。注:在java中......
  • 从零构建链表
    最重要的头节点是这样创建的:        Node*Head=newNode;//头节点不存储数据        Head->next=NULL;        Node*pre=Head......