题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
分析:
逐个头插,实现反转
设置3个指针:head 头节点、prev 前一个节点、 cur 下一个节点
注意:链表为空,或者只有一个节点的情况!
代码:
#include<iostream>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(int x) :val(x), next(nullptr){}
};
class Solution{
public:
ListNode* reverseList(ListNode* pHead)
{
if (pHead == nullptr || pHead->next == nullptr) return pHead;
ListNode dummy(-1);
dummy.next = pHead;
ListNode *head = &dummy;
ListNode* prev = head->next;
ListNode* cur = prev->next;
do
{
prev->next = cur->next;
cur->next = head->next;
head->next = cur;
cur = prev->next;
} while (cur != nullptr);
return dummy.next;
}
};
剑指offer书上的代码:
ListNode* ReverList(ListNode* pHead)
{
ListNode* pReverseHead = NULL;
ListNode* pNode = pHead;
ListNode* pPrev = NULL;
while(pNode != NULL)
{
ListNode* pNext = pNode->m_next;
if(pNext == NULL)
pReverseHead = pNode;
pNode->m_next = pPrev;
pPrev = pNode;
pNode = pNext;
}
return pReverseHead;
}
欢迎讨论交流!
转载于:https://blog.51cto.com/3240611/1617528