题目描述:
设计一算法,对单链表实现逆置。
//单链表存储结构
typedef struct LNode
{
ElemType data; //数据域
struct Lnode *next; //指针域
}LNode,*LinkList;
分析:
通过设置虚拟结点对链表重新链接
将链表元素从头到尾依次遍历,同时用前插法将链表元素重新链接。
代码实现
void antiList(LPLIST &LA)
{
LPNODE pmove=LA->next; //设置虚拟结点,将链表的首元结点赋值给虚拟结点
LPNODE res; //设置中间结点,临时存储虚拟结点
//改变虚拟链表L,就是改变链表LA,两个链表共用同一存储空间
LPLIST L=LA; //设置虚拟链表,将链表的头结点赋值给虚拟结点
L->next=NULL; //尾结点指向空
//通过虚拟结点遍历链表
while(pmove)
{
//利用前插法将链表元素重新进行链接
res=pmove->next; //保存当前结点的下一个结点 防止找不到
pmove->next=L->next;
L->next=pmove;
pmove=res;
}
}