【数据结构】链表的逆置(图文)
作者:互联网
前言
输入的是一条带有头结点的链表L 故头结点为L,第一个节点为L->next.
先上代码
void Reverse(LinkList *L)
{
LinkList *p,*q;
p = L->next;
L->next = NULL;
while(p!=NULL)
{
q = p;
p = p->next;
q->next = L->next;
L->next = q;
}
}
讲解(摘自:链表逆置详细讲解(图文))
我们先看第一轮循环做了什么:
建议阅读顺序:黑色(初始)、蓝色(操作)、红色(理解)
第二轮:
建议阅读顺序:黑色(初始)、蓝色(操作)、红色(理解)
第三轮:
就是头插法
就是头插发
就是头插发
最后给一份带注释的代码~
void listReverse(linkedList &L)
{
node *p,*s;
//1.准备工作
p = L->next;
L->next = NULL;
while(p)
{
//2.1 s记录正在处理的结点,p记录下一轮待处理的结点
s = p; //s承接上一轮记录的位置
p = p->next; //p为下一轮记录位置
//2.2 把s插入 已逆置的部分 中
s->next = L->next; // L->next代表已逆置的第一结点,s的指针域指向它
L->next = s; //(头结点的指针域,即)第一结点 设置为s
//2.2步骤相当于:
//s 对 队伍(已逆置部分)的队首(已逆置的第一结点)说:你不要排在柜台前了,你排在我后面
//等队伍排在s后面后,s自己排到了柜台前
}
}
标签:结点,NULL,记录,next,链表,数据结构,已逆置,逆置 来源: https://www.cnblogs.com/zhujiaozhu/p/15389234.html