C语言 链表算法题,关于链表的算法题,在线求解。

双向链表中需要三个基本数据,一个携带具体数据一个携带指向上一环节的prev指针,一个携带指向下一环节的next指针请改写双向链表,仅用一个指针np实现双向链表的功能定义np为next XOR prev,请根据表头提供的信息为双向链表编写插入函数、删除函数和查找函数,并在O(1)时间内实现链表的翻转

问题的关键,在于怎样利用prev指针和next指针的异或结果来获得上一节点或下一节点的地址值。也就是说如何利用异或来算出具体的prev及next值。我们注意到两点:

2、双向链表中头结点的prev值为0,尾结点的next值为0因此,可以根据这一点计算出全部的结点prev及next地址。依据第一点表头信息需要提供头结點的地址。

C语言 链表中指针变量中存储的数值不能直接参与异或运算,需要转换为int型变量参与运算再转换为指针来指定特定的地址。

根据前述分析定义两个结构体如下:

作为结点的结构体,包含结点必须的两个数据:类型为int的num数据单元和类型为int的np指针,其中np指针中包含了next和prev两个结点的地址

作为双向链表的表头,提供了链表的大小、头结点两个数据以供他人操作该链表。

该函数接受两个参数——鏈表L和数据value该函数的功能为将数据value插入表头。具体代码如下:

该函数接受一个参数——链表L该函数的功能为列出链表L中的所有数据单え。具体代码如下:

删除函数和查找函数代码从略下面是主函数测试代码,在windows gcc下编译通过并输出正确结果:

我要回帖

更多关于 C语言 链表 的文章

 

随机推荐