题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
分析:
逐个头插,实现反转
设置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; }
欢迎讨论交流!
本文出自 “针挑土” 博客,请务必保留此出处http://3240611.blog.51cto.com/3230611/1617528
原文地址:http://3240611.blog.51cto.com/3230611/1617528