刷题记录-day1(从尾到头打印链表、反转链表)

JZ6 从尾到头打印链表

在这里插入图片描述

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param listNode ListNode类 
# @return int整型一维数组
#
class Solution:
    def printListFromTailToHead(self , listNode: ListNode) -> List[int]:
        # 解法一:杰娃子提供方法,遍历,并将遍历到的val写在所有结果的最前面
        result = []
        while listNode:
            result = [listNode.val] + result
            listNode = listNode.next
        return result
        
        # 解法二:递归解法,但是python有递归深度限制
        if listNode != None:
            if listNode.next:
                self.printListFromTailToHead(listNode.next)
            result.extend([listNode.val])
        return result
        
        # 解法三:利用栈,后进先出
        result = []
        stack = []
        while listNode:
            stack.append(listNode.val)
            listNode = listNode.next
        while stack:
            result.append(stack.pop())
        return result
        
        # 解法四:直接遍历,最后反转list即可
        result = []
        while listNode:
            result.append(listNode.val)
            listNode = listNode.next
        return result[::-1]

反转链表

在这里插入图片描述

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @return ListNode类
#
class Solution:
    def ReverseList(self , head: ListNode) -> ListNode:
        # write code here
        # 普通方法,取出链表中每个值放到list,然后将list反转,最后根据反转后的list重新构建链表,注意最后一个元素的next需要置为None
        if not head: return head
        result = []
        while head:
            result.append(head)
            head = head.next
        result = result[::-1]
        for i in range(len(result)-1):
            result[i].next = result[i+1]
        result[-1].next = None
        return result[0]
        
        # 双链表法,先把当前值后面所有保存在temp中,然后把当前值后面的都换成result,也就是取出一个值就放在result的前面,然后
        # 更新result为目前链表中所有,之后在从temp中读出进行下一步操作
        result = None
        while head:
            temp = head.next            #temp = 2,3,None        temp = 3,None
            head.next = result          #head.next = None       head.next = 1,None
            result = head               #result = 1,None        result = 2,1,None
            head = temp                 #head = 2,3,None        head = 3,None
        return result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值