数据结构 链表的逆置
本人经过长时间的理解,终于发现链表的逆置其实就是逆序建立链表的过程,只不过现在不用建立新的结点,不用分配内存空间而已,我们只是需要把链表后面的结点拆出来,再按照逆序建表的头插法插到前面的链表中即可。
下面是C语言程序,逆置单链表:
void reverse(struct node * head)
{///单链表逆置函数
struct node *p, *q;///逆置单链表需要用到两个指针
p = head->next;///先令 p 指向第一个元素结点
q = p->next;/// q 指向 p 的后继结点
head->next = NULL;///head置成空表
while(p != NULL)///当 p 为空表时结束循环
{
p->next = head->next;
/// p 所指向结点插入头结点后,即把p插到头结点后面
head->next = p;
///令头结点的指针域指向p,完成结点插入
p = q;///指针 p 后移
if(q != NULL) q = q->next;
///当 q 指向不为空时, 指针 q 后移
///当 q 指向NULL时, q 没有指向结构体,这时是不存在q->next的
}
}
此外,有一道链表逆置的题目,链接如下:
数据结构实验之链表三:链表的逆置
https://blog.youkuaiyun.com/weixin_44143702/article/details/86599990
文章中包括问题描述以及答案代码