已知下面定义的结构,编写一个逆序链表元素的方法
struct T_DATA
{
int _data;
struct T_DATA *pNext;
T_DATA(int data)
{
_data = data;
pNext = NULL;
}
};
struct T_DATA *head = NULL;// 该变量待会定义在main函数的开头
答案:
#include <stdio.h>
#include <crtdbg.h>
struct T_DATA
{
int _data;
struct T_DATA *pNext;
T_DATA(int data)
{
_data = data;
pNext = NULL;
}
};
struct T_DATA *head = NULL;
// 逆序链表元素的方法
void reverse(struct T_DATA *&head)
{
struct T_DATA *pCur = head, *pPrivious = NULL, *pNext = NULL;
while (pCur)
{
pNext = pCur->pNext;
if (!pCur->pNext)
{
pCur->pNext = pPrivious;
break;
}
if (pCur == head)
{
pCur->pNext = NULL;
pPrivious = pCur;
pCur = pNext;
}
else
{
pCur->pNext = pPrivious;
pPrivious = pCur;
pCur = pNext;
}
}
head = pCur;
}
// 向链表中插入元素
void insert(struct T_DATA *&previousNode, struct T_DATA *pNewNode)
{
if (NULL == previousNode)
{
previousNode = pNewNode;
}
else
{
previousNode->pNext = pNewNode;
}
}
// 释放链表
void release(struct T_DATA *head)
{
struct T_DATA *pTmp = head, *pNext = NULL;
while (pTmp)
{
pNext = pTmp->pNext;
delete pTmp;
pTmp = pNext;
}
}
// 打印链表
void print(struct T_DATA *head)
{
T_DATA *pCur = head;
while (pCur)
{
printf("%d ", pCur->_data);
pCur = pCur->pNext;
}
printf("\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
struct T_DATA *head = NULL;
T_DATA *pNode0 = new T_DATA(3);
T_DATA *pNode1 = new T_DATA(1);
T_DATA *pNode2 = new T_DATA(4);
T_DATA *pNode3 = new T_DATA(6);
T_DATA *pNode4 = new T_DATA(5);
// 向链表中插入元素
insert(head, pNode0);
insert(pNode0, pNode1);
insert(pNode1, pNode2);
insert(pNode2, pNode3);
insert(pNode3, pNode4);
// 打印初始链表
print(head);
// 逆序链表元素
reverse(head);
// 打印逆序后的链表
print(head);
// 暂停程序
getchar();
// 释放链表
release(head);
// 捕获内存泄漏
_CrtDumpMemoryLeaks();
return 0;
}