#include<iostream>
#include<vector>
using namespace std;
//链表定义
struct LIST_NODE
{
int m_data;
LIST_NODE* m_next;
LIST_NODE(const int &data=0):m_data(data),m_next(nullptr)
{
}
~LIST_NODE()
{
}
};
//采用尾插法
void insertListNode(LIST_NODE* node, LIST_NODE* inNode)
{
//创造一个有序
while (node->m_next)
{
node = node->m_next;
}
node->m_next = inNode;
}
//反转链表
LIST_NODE* reverseListNode(LIST_NODE* node)
{
if (node==nullptr)
{
return nullptr;
}
auto auxNode = node->m_next;
node->m_next = nullptr;
while (auxNode)
{
auto tempNode = auxNode;
auxNode = auxNode->m_next;
tempNode->m_next = node;
node = tempNode;
}
return node;
}
//合并两个有序链表
LIST_NODE* mergeListNode(LIST_NODE* node1, LIST_NODE* node2)
{
//这里合并两个有序链表
LIST_NODE* newNode = nullptr;
while (node1&&node2)
{
LIST_NODE* tempNode = nullptr;
if (node1->m_data<=node2->m_data)
{
tempNode = node1;
node1 = node1->m_next;
}
else
{
tempNode = node2;
node2 = node2->m_next;
}
tempNode->m_next = nullptr;
if (newNode)
{
insertListNode(newNode, tempNode);
}
else
{
newNode = tempNode;
}
}
if (node1)
{
insertListNode(newNode, node1);
}
if (node2)
{
insertListNode(newNode, node2);
}
return newNode;
}
//创建链表
void createListNode(LIST_NODE* &head)
{
int num = 0;
cin >> num;
for (int i=0;i<num;i++)
{
int data = rand();
if (head)
{
auto tempNode=new LIST_NODE(data);
head=mergeListNode(head, tempNode);
}
else
{
head = new LIST_NODE(data);
}
}
}
//释放动态分配的内存
void freeNode(LIST_NODE* node)
{
while (node)
{
auto tempNode = node;
node = node->m_next;
delete tempNode;
tempNode = nullptr;
}
node = nullptr;
}
//输出链表数据
void outPutData(LIST_NODE* node)
{
while (node)
{
cout << node->m_data <<" ";
node = node->m_next;
}
cout << endl;
}
//测试函数
void testReverseListNode()
{
LIST_NODE* head1 = nullptr;
createListNode(head1);
cout << "未合并之前head1的数据" << endl;
outPutData(head1);
auto reverseNode = reverseListNode(head1);
cout << "合并以后的数据" << endl;
outPutData(reverseNode);
freeNode(reverseNode);
reverseNode = nullptr;
}
int main()
{
testReverseListNode();
}
手撕一个链表的反转
于 2023-11-10 10:40:40 首次发布