吃肉的刷题记录6-206.反转链表

https://leetcode.cn/problems/reverse-linked-list/
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

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

解法一:暴力反转

按照顺序遍历一次链表,存到列表,然后重新遍历链表,从列表末尾依次赋值

# 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]:
        curr = head
        chain = []
        while curr :
            chain.append(curr.val)
            curr = curr.next
        rev_curr = head
        
        i = len(chain)-1
        while rev_curr:
            rev_curr.val = chain[i]
            
            i -= 1
            rev_curr = rev_curr.next
        return  head

解法二:修改链表指向

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        pre_node = None
        cur_node = head
        while cur_node:  # 循环直到当前节点为 None
            next_node = cur_node.next  # 在翻转指针之前保存下一个节点
            cur_node.next = pre_node  # 翻转当前节点的指针
            pre_node = cur_node  # 前进到下一个节点
            cur_node = next_node  # 继续到下一个节点
        return pre_node  # 新的头节点是原链表的尾节点

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值