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