LeetCode 反转链表(C++)

本文介绍了如何使用C++解决LeetCode上的反转链表问题,包括非递归(迭代)算法、递归算法和创建新数组的解题思路。详细解释了每种方法的实现过程,如迭代法通过改变结点的next指针实现逆序,递归法则从后向前逆置链表。
摘要由CSDN通过智能技术生成

题目描述

反转一个单链表。

示例

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

解题思路

本题目可以通过三种方法,递归和非递归(迭代)和 创建新数组 的方法实现。

1、非递归(迭代)算法

对于上面的例子,可将结点1的指针指向空,结点2的指针指向结点1,以此类推,结点5指向结点4,即可完成链表的逆置。

class Solution {
   
public:
    ListNode* reverseList(ListNode* head) {
   
        ListNode* pCurrent = head;
        ListNode* pCurNext = pCurrent->next;
        pCurrent->next = NULL;
        while(pCurNext)
        {
   
            ListNode* tmp = pCurrent;
            pCurrent = pCurNext;
            pCurNext = pCurNext->next;
            pCurrent->next = tmp;
        }
        return pCurrent;
    }
};

2、递归算法

和非递归的思路一致,只不过递归的方法是从后向前逆置链表。还是上述的例子,通过递归,让 h e a d head head指针下移,直到指向结点4,结点4的 n e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值