要求:

Explain how to implement doubly linked lists using only one pointer value x.np per
item instead of the usual two (next and prev). Assume that all pointer values can be
interpreted as k-bit integers, and define x.np to be x.np = x.next XOR x.prev,
the k-bit “exclusive-or” of x.next and x.prev. (The value NIL is represented by 0.)
Be sure to describe what information you need to access the head of the list. Show
how to implement the SEARCH, INSERT, and DELETE operations on such a list.
Also show how to reverse such a list in O(1) time.

解法:

x.np = x.prev ^ x.next

NIL用0表示

考虑链表第一个元素x.np = NIL ^ x.next = x.next,即链表头存的指针值和普通双向链表的next指针相同

中间所有元素x.np = x.prev ^ x.next

考虑链表最后一个元素x.np = x.prev ^ NIL = x.prev,即链表最后一个元素存的指针和普通双向链表的prev指针相同

我们知道第一个元素的next指针,中间元素的next指针可以通过前一个元素的np和当前元素的np异或计算获得,这就为前序遍历创造了可能

我们知道最后一个元素的prev指针,中间元素的prev指针可以通过当前元素的np和后一个元素的np异或计算获得,这就为后续遍历创造了可能

总之,np = prev ^ next, NIL = 0致使链表头元素和尾元素np值具有了特殊性,这正是此种表示的精妙之处,节省了O(n)的空间开销,但增加了运算开销(位运算),计算机执行位运算具有速度优势。

此种情况下,如果想要翻转链表就变得异常容易,只需要将链表的头尾指针交换即可。

CLRS10.2-8练习 - 单指针值实现双向链表的更多相关文章

  1. 用jQuery获取表单的值

    在日常开发过程中,有许多用到表单的地方.比如登录,注册,比如支付,填写订单,比如后台管理等等. 使用jQuery来获取表单的值是比较常见的做法. 常见表单 单行文字域:<input type=' ...

  2. JS表单设置值

    //表单设置值 $.fn.setForm = function(jsonValue) { var obj = this; $.each(jsonValue, function (name, ival) ...

  3. asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)

    原文:asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!) 我想用post的方式把一个页面表单的值,传到另一个页面.当我点击Default.as ...

  4. Jquery Form表单取值

    之前js取form表单的值都是一个一个的取,数量一多之后容易出错而且烦透了.感谢那些愿意分享的人. 页面定义form,并给form指定id值,里面的元素只要是需要键值对应的都赋予name属性,并且na ...

  5. c指针 --笔记2返回指针值的函数

    返回指针值的函数 一般带回指针值的函数,定义形式为: int *a (int x, int y); 看这个经典案例: #include <stdio.h> int main(int arg ...

  6. 取值:form表单取值、input框绑定取值

    1. form表单取值1.1 方式一,通过<form bindsubmit="formSubmit">与<button formType="submit ...

  7. 用 malloc 或 new 申请内存之后,应该立即检查指针值是否为 NULL

    用 malloc 或 new 申请内存之后,应该立即检查指针值是否为 NULL. 防止使用指针值为 NULL 的内存. #include <iostream> #include <s ...

  8. 【antd】form表单默认值设置

    问题: 在antd的form表单的api里面有个"initialValues"可以设置默认值.但是表单没有更新 <Form name="test" for ...

  9. jQuery name属性与checked属性结合获取表单元素值

    var paytype = $("input[name='paytype']:checked").val(); alert(paytype); input元素下名称为paytype ...

随机推荐

  1. Tomcat8.x的安装与启动

    Tomcat是企业网站的服务器,大多都用于中.小型网站开发和学习开发JSP应用程序中.笔者也是开始学习,下面介绍Tomcat8.x的安装步骤. 进入Tomcat官网,点击左边的download目录下的 ...

  2. 引用fastclick.js或使用触屏监听 滑动屏幕报错:解决[Intervention] Unable to preventDefault inside passive event listener

    使用fastClick.js所产生的一些问题 开发h5活动页时想到移动端会有300ms的延迟,于是便打算用fastClick.js解决. 页面引入fastClick.js后,滑动H5页面的时候发现谷歌 ...

  3. Oracle数据库备份、灾备的23个常见问题

    为了最大限度保障数据的安全性,同时能在不可预计灾难的情况下保证数据的快速恢复,需要根据数据的类型和重要程度制定相应的备份和恢复方案.在这个过程中,DBA的职责就是要保证数据库(其它数据由其它岗位负责) ...

  4. zookeeper生产最广泛使用java客户端curator介绍及其它客户端比较

    关于zookeeper的原理解析,可以参见zookeeper核心原理详解,本文所述大多数实践基于对zookeeper原理的首先理解. Curator是Netflix公司开源的一个Zookeeper客户 ...

  5. 一条SQL语句执行得很慢的原因有哪些?| MySQL高性能优化规范建议

    一条SQL语句执行得很慢的原因有哪些 https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485185&idx=1&am ...

  6. Xamarin.FormsShell基础教程(4)Shell项目内容列表页面运行效果

    Xamarin.FormsShell基础教程(4)Shell项目内容列表页面运行效果 在创建好Shell解决方案后,就可以运行程序了.本小节将讲解运行后的效果. 内容列表页面 运行程序,初始效果如图1 ...

  7. 2019t1_sumdoc_list.txt aa.docx acc baidu v2 sbb.docx Acc jindon v2 sbb.docx assetsList.html Atiitt 日本刑法典读后笔记.docx Atiti 遇到说花心的时候赞美应对.docx Atitit lesson.docx Atitit malye主义、mzd思想和dsp理论的区别和联系.docx Ati

    2019t1_sumdoc_list.txtaa.docxacc baidu v2 sbb.docxAcc jindon v2 sbb.docxassetsList.htmlAtiitt 日本刑法典读 ...

  8. java agent 详细介绍 -javaagent参数

    java agent 详细介绍 简介 java agent是java命令的一个参数.参数 javaagent 可以用于指定一个 jar 包,并且对该 java 包有2个要求: 这个 jar 包的MAN ...

  9. jQuery-webcam使用

    基本页面 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

  10. Google软件测试之道笔记与总结

    [本文出自天外归云的博客园] 以下内容除了笔记还有总结,有个人理解的成分在内. 第一章笔记与总结 1. 开发人员也承担了质量的重任,质量从来就不仅仅是一些测试人员的问题.头衔有测试字样的人的任务是让那 ...