学习不能只是消化,要学会转化链接,扩宽自己的知识层面。上课过程中,将老师讲的新知识点与之前的内容链接实现,才是真正将知识点消化储备。
通过学习链表的逆序,尝试实现队列链表的逆序:
具体代码实现如下:
typedef int data_type;
//创建链表
typedef struct link
{
data_type data;
struct link *pNext;
}Link;
//创建队列
typedef struct queue_stack
{
Link *pHead;
Link *pTail;
int count;
}QueueNode;
enum err
{
PLSERROR=-5,
MALLOCERROR,
OK
};
函数功能:实现队列链表的逆序
int ReverseQueueLink(QueueNode *pQueue)
{
if(NULL == pQueue)
{
return PLSERROR;
}
//定义一个指针,保存首节点后面的结点(无头结点)
Link *pTemp = NULL;
//保护首节点后面的结点
pTemp = pQueue->pHead->pNext;
pQueue->pHead->pNext = NULL;
//定义一个指针
Link *pDel = NULL;
while(NULL != pTemp)
{
//头删
pDel = pTemp;
pTemp = pTemp->pNext; //链表2往后移一个节点
//头插
pDel->pNext = pQueue->pHead;
pQueue->pHead = pDel;
}
//pTail重新定位,移动到链表最后一个有效数据位置,确保下一次有效插入!
pQueue->pTail = pQueue->pHead;
while( NULL != pQueue->pTail->pNext)
{
pQueue->pTail = pQueue->pTail->pNext;
}
return OK;
}
运行结果: