leetcode刷题记录|206 _反转链表

本文介绍了LeetCode第206题的解决方案,该题属于链表问题。通过定义两个指针prev和curr,逐步反转链表。在C++和Python中分别给出了详细的代码实现,实现了链表的反转操作。文章还包括了具体的解题步骤和示例解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


作者 github链接 github链接

力扣第206题

类型:链表

题目:

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

示例1

在这里插入图片描述

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

示例2

在这里插入图片描述

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

示例3

输入:head = []
输出:[]

解题思路

思路细节:

  1. 定义两个指针:prev:前指针节点;curr:当前指针节点
  2. 前指针节点指向nullcurr放在链表的head
  3. curr!=null就一直循环
  4. 因为下一步prev指向了curr->next,连接后面的链表即将断开,这是我们做一个提前准备,搞一个next指针当临时的给后面的链表做一个标志,以便curr向后面迭代。
  5. curr->next原来链接后面的值,现在让它断开,来让prev来连接curr->next
  6. prev向后面移动,curr向后面移动(这里就用到了前面准备好的临时变量next,正是因为有next,才能让curr找到下一个位置继续迭代)
  7. 迭代完成,返回整个链表,实现反转

c++

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        /*
        定义两个指针:
        prev:前指针节点
        curr:当前指针节点
        */ 
        ListNode * prev = NULL;//前指针节点指向null
        ListNode *curr = head;//curr放在链表的head处
        while(curr){//curr!=null就一直循环
            ListNode *next = curr->next;//因为下一步prev指向了curr->next,连接后面的链表即将断开,这是我们做一个提前准备,搞一个next指针当临时的给后面的链表做一个标志,以便curr向后面迭代。
            curr->next = prev;//curr->next原来链接后面的值,现在让它断开,来让prev来连接curr->next
            prev = curr;//prev向后面移动
            curr = next;//curr向后面移动(这里就用到了前面准备好的临时变量next,正是因为有next,才能让curr找到下一个位置继续迭代)
        }
        return prev;//迭代完成,返回整个链表,实现反转

    }
};

python

# 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: ListNode) -> ListNode:
        prev = None
        curr = head
        while curr is not None:
            next = curr.next
            curr.next = prev
            prev = curr
            curr = next
        return prev

解题草稿纸(仅供参考,如有错误还望指正)
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值