分享

反转列表测试--剑指offer题目

 KookNut39 2021-12-15
typedef struct _LIST_NODE_
{
struct _LIST_NODE_* Next;//下一个节点
int  Data;
}LIST_NODE, *PLIST_NODE;
void main()
{
//构建一个列表
PLIST_NODE v1 = (PLIST_NODE)malloc(sizeof(LIST_NODE));
PLIST_NODE FirstNode = v1;
for (int i = 0;i < 5; i++)
{
v1->Data = i;
PLIST_NODE v2 = (PLIST_NODE)malloc(sizeof(LIST_NODE));
if (i == 4)
{
v1->Next = nullptr;
}
else
{
v1->Next = v2;
v1 = v1->Next;
}
}
PLIST_NODE v3 = ReverseList(FirstNode);//反转列表,返回头指针
FreeMemory(v3);//回收结点内存
getchar();
}
PLIST_NODE ReverseList(PLIST_NODE ListHead)
{
if (ListHead == nullptr)
{
return nullptr;
}
PLIST_NODE  Blink = nullptr;
PLIST_NODE  Flink = nullptr;
while (ListHead != nullptr)
{
/*
Flink的变化 1 2 3 4
*/
//Flink保存当前节点的值的下一个
Flink = ListHead->Next;
//把当前的下一个置为上一个的值  //实现了指针指向反转
ListHead->Next = Blink;
Blink = ListHead;//保存当前节点指针
ListHead = Flink;//最终在ListHead中保存的是最后一个节点的指针
}
return Blink;//返回当前节点指针
}

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多