反转链表 c++

反转链表

题目描述:输入一个链表,反转链表后,输出新链表的表头
解题思路:一种是递归方法,一种非递归方法,递归方法比较简单,从头结点开始,依次将剩下的结点作为递归中新的链表,找到最后一个结点,结尾反转链表的新表头。非递归方法想要实现反转链表,需要声明一个只能用来存放,下一个结点,以使得链表指针可以反向,一个指针用来指向当前遍历的只能,一个指针指向当前结点的下一个结点。

递归法

示例代码如下:

struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if(pHead==nullptr||pHead->next==nullptr)
            return pHead;
        ListNode* pRHead = ReverseList(pHead->next);
        pHead->next->next = pHead;
        pHead->next = nullptr;
        return pRHead;
    }
};

非递归法

示例代码如下:

struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if(pHead==nullptr||pHead->next==nullptr)
            return pHead;
        ListNode* pRHead = ReverseList(pHead->next);
        pHead->next->next = pHead;
        pHead->next = nullptr;
        return pRHead;
    }
};

猜你喜欢

转载自blog.csdn.net/u011114913/article/details/80861446