和上题不一样,这题我们需要改单链表的结构了.
1.问题描述
输入一个链表,反转链表后,输出新链表的表头。
2. 解题思路
参考剑指offer官方解法
3. 代码
#include <iostream>
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(nullptr) {
}
};
ListNode* ReverseList(ListNode* pHead) {
ListNode* pPreNode = nullptr;
ListNode* pNode = pHead;
ListNode* pReverseNode = nullptr;
while (pNode != nullptr) {
ListNode* pNextNode = pNode -> next;
if (pNextNode == nullptr) { // return
pReverseNode = pNode;
}
pNode -> next = pPreNode;
pPreNode = pNode;
pNode = pNextNode;
}
return pReverseNode;
}
void printList(ListNode* pHead) {
while (pHead != nullptr) {
std::cout << pHead -> val << ",";
pHead= pHead -> next;
}
std::cout << "\n";
}
int main()
{
ListNode* pHead = new ListNode(1);
pHead -> next = new ListNode(2);
pHead -> next -> next = new ListNode(3);
std::cout << "origin list is:" << std::endl;
printList(pHead);
ListNode* pReverseNode = ReverseList(pHead);
std::cout << "reverse list is:" << std::endl;
printList(pReverseNode);
return 0;
}
下面是反转双向链表.