概述
生成一个单链表,并反转这个单链表。
思路
写好了代码,再来写思路。博主往往比较懒,建议直接看代码。这里简单写一下,主要思路就是遍历一遍。
源码
本文主要是以C、C++、QT为基础进行编程,运行前简单修改即可。测试入口函数为 void Test_SNode()。
struct SNode
{
quint32 node;
SNode *pnext;
};
SNode *g_pHead = NULL;
void OutputSNode()
{
SNode *p1;
p1 = g_pHead;
if(NULL == p1)
{
return;
}
printf("\nNode: %d",p1->node);
p1 = p1->pnext;
while(NULL != p1)
{
printf(" %d",p1->node);
p1 = p1->pnext;
}
printf("\n");
}
const quint8 NODE_SUM = 10;
void MallocSNode()
{
SNode *p1,*p2 = NULL;
quint8 i=1;
if(0 == NODE_SUM)
{
return;
}
p1 = (SNode*)malloc(sizeof(SNode));
if(NULL == p1)
{
return;
}
p1->node = i;
p1->pnext = NULL;
g_pHead = p1;
i = 2;
while(i<=NODE_SUM)
{
p2 = (SNode*)malloc(sizeof(SNode));
if(NULL == p2)
{
break;
}
p2->node = i;
p2->pnext = NULL;
p1->pnext = p2;
p1 = p2;
i++;
}
}
void FreeSNode()
{
SNode *p1,*p2;
p1 = g_pHead;
while(NULL != p1)
{
p2 = p1->pnext;
FREE(p1);
p1 = p2;
}
}
void ReversalSNode()
{
SNode *p1,*p2,*p3;
qDebug()<<"ReversalSNode.";
if(NULL == g_pHead)
{
return;
}
p1 = g_pHead;
p2 = g_pHead->pnext;
p1->pnext = NULL;
while(NULL != p2)
{
p3 = p2->pnext;
p2->pnext = p1;
p1 = p2;
p2 = p3;
}
g_pHead = p1;
}
void Test_SNode()
{
MallocSNode();
OutputSNode();
ReversalSNode();
OutputSNode();
FreeSNode();
}
运行结果
Node: 1 2 3 4 5 6 7 8 9 10
Node: 10 9 8 7 6 5 4 3 2 1