问题:输入一个链表,将其进行反转。
思路:定义三个指针分别指向当前结点,前一个结点,后一个结点,然后依次反转指针指向。
具体代码如下:(C++)
struct ListNode
{
int val;
ListNode* next;
ListNode(int x):val(x),next(nullptr){}
};
class Solution
{
public:
ListNode* ReverseList(ListNode* pHead)
{
if(pHead == nullptr) //链表为空
return nullptr;
if(pHead->next == nullptr) //链表只有一个结点
return pHead;
ListNode* pPreNode = pHead , * pCurNode = pHead->next;
ListNode* pNextNode = nullptr;
pPreNode->next = nullptr;
while(pCurNode->next != nullptr)
{
pNextNode = pCurNode->next;
pCurNode->next = pPreNode;
pPreNode = pCurNode;
pCurNode = pNextNode ;
}
//当pCurNode为倒数第1个结点时,上面循环跳出
pCurNode->next = pPreNode;
return pCurNode;
}
};