题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
分析:
逐个头插,实现反转
设置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