题目:定义一个函数,输入一个链表的头节点,反转该链表并输入反转后链表的头节点。
AC代码如下:
#include<iostream>
using namespace std;
struct ListNode
{
int val;
struct ListNode *next;
ListNode(int x):
val(x),next(NULL){}
};
class Solution
{
public:
ListNode* ReverseList(ListNode* pHead)
{
ListNode *pNewHead=nullptr;
ListNode *pNode=pHead;
ListNode *pPreNode=nullptr;
if(pHead==nullptr ||pHead->next==nullptr)
return pHead;
while(pNode!=NULL)
{
ListNode *pNext=pNode->next;//后结点保存下来
if(pNext==nullptr)
{
pNewHead=pNode;//一直移动到next为空的时候 这时候的pnode即为新链表的头结点
}
pNode->next=pPreNode;//指针反转
pPreNode=pNode;//前结点向后移动一位
pNode=pNext; //结点向后移动一位
}
return pNewHead;
}
};
int main()
{
Solution sol;
ListNode *proot=new ListNode(1);
// proot->next=new ListNode(2);
// proot->next->next=new ListNode(3);
// proot->next->next->next=new ListNode(4);
// proot->next->next->next->next=new ListNode(5);
//
//正序输出
// while(proot!=nullptr)
// {
// cout<<proot->val<<" ";
// proot=proot->next;
// }
ListNode *ptr;
ptr=sol.ReverseList(proot);
while(ptr!=nullptr)
{
cout<<ptr->val<<" ";
ptr=ptr->next;
}
//反序输出 5 4 3 2 1 功能测试
//整个链表只有一个节点 测试成功
//空链表 ListNode *proot=nullptr; 边界测试
}

本文介绍了一个简单的链表反转算法,并提供了完整的C++实现代码。通过定义一个函数接收链表头节点作为参数,实现链表的反转操作。文章还展示了如何创建链表节点以及如何输出反转后的链表。

被折叠的 条评论
为什么被折叠?



