用单链表通过异或思想来实现双链表的功能

参考大神博客:http://blog.csdn.net/aptx704610875/article/details/8028023

说明:主要的思想是通过异或的方式来实现的,基本的思想是通过时间来换空间的。

比如是两个数之间的交换,就是a,b

只要将

a=a+b;

b=a-b;

a=a-b;

然后就是异或,我们也可以将他们进行上述的异或操作,因为异或操作有一系列的性质是可用的。

一系列的性质,相当于加法,将结果保存在其中。

1、如果我们知道头地址,如第一个节点地址为1000,那么->next便可得1001,令1000^(1001->next)可得1002, 1001^(1002->next)可得1003,以此类推

2、如果我们知道末尾结点地址和倒数第二个结点地址,那么令1004^(1003->next)可得1002, 令1003^(1002->next)可得1001,以此类推

时间: 2024-10-09 04:03:46

用单链表通过异或思想来实现双链表的功能的相关文章

java数据结构与算法之双链表设计与实现

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/53047590 出自[zejian的博客] 关联文章: 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) ??上一篇文章分析顺序表和单链表,本篇就接着上篇继续聊链表,在单链表

线性表—双链表

1.基础知识 a.双链表结点的结构:其由前序元素地址,数据域,后继元素地址组成. b.双链表结点的连接方法:先声明该结点,可以在内部也可以利用其特性来表明前序结点和后继结点是什么,之后同时还需要说明"其前序结点的后继地址为该结点"和"其后继结点的前序地址为该结点.(本质:双向) 2.循环双链表的实现 线性表接口LList package com.clarck.datastructure.dlinked; /*** 线性表接口LList,描述线性表抽象数据类型,泛型参数T表示数

数据结构之自建算法库——循环双链表

本文针对数据结构基础系列网络课程(2):线性表中第13课时循环链表. 按照"0207将算法变程序"[视频]部分建议的方法,建设自己的专业基础设施算法库. 双链表算法库算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:cdlinklist.h,包含定义双链表数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef CDLINKLIST_H_INCLUDED #define CDLINKLIST_H_INCLUDED //循环双链表基本运算函数 typedef int E

java实现双链表(差点没写吐系列...)

刚才把单链表写完了,现在又把双链表写了,双链表和单链表的区别就是每个节点有prior和next两个指针,不同于单链表的一个next指针,而且,正是因为有这两个指针,所以双链表可以前后两个方向去移动指针, 同时,我所实现的双链表和单链表不同之处在于,主要体现在其不用每次都把指针从头结点开始遍历,而是根据实际情况从选择最优的线路去遍历,移动到想要的位置.差点写吐了....话不多说,上代码 1 package com.voole.linkedlist; 2 3 public class Test {

C#双链表

单链表允许从一个结点直接访问它的后继结点,所以, 找直接后继结点的时间复杂度是 O(1).但是,要找某个结点的直接前驱结点,只能从表的头引用开始遍历各结点.如果某个结点的 Next 等于该结点,那么,这个结点就是该结点的直接前驱结点.也就是说,找直接前驱结点的时间复杂度是 O(n),n是单链表的长度.当然,我们也可以在结点的引用域中保存直接前驱结点的地址而不是直接后继结点的地址.这样,找直接前驱结点的时间复杂度只有 O(1),但找直接后继结点的时间复杂度是 O(n).如果希望找直接前驱结点和直接

Python与数据结构[0] -> 链表[1] -> 双链表与循环双链表的 Python 实现

双链表 / Doubly Linked List 目录 双链表 循环双链表 1 双链表 双链表和单链表的不同之处在于,双链表需要多增加一个域(C语言),即在Python中需要多增加一个属性,用于存储指向前一个结点的信息. Doubly linked list: node_1 <---> node_2 <---> node_3 完整代码 1 from linked_list import LinkedList, test 2 3 4 class NodeDual: 5 def __i

c++学习笔记_c++实现双链表

#include "stdafx.h"#include <iostream>#include <fstream>#include "conio.h"using namespace std; struct _DOUBLE_LINK_NODE  //定义一个双链表结构{    char * data;    struct _DOUBLE_LINK_NODE* prev; //双链表的前驱    struct _DOUBLE_LINK_NODE*

C++ 双链表练习,实现球在屏幕中滚动,排坑

#include <stdio.h> #include <stdlib.h> #include <easyx.h> //定义一个双链表节点 struct Node { int x; //数据 int y; int z; Node* next; //下个数据 Node* last; //上个数据 }; //定义list存放node指针 struct List { int size; //存放node节点的大小 Node* head; //指针指向头节点 Node* tai

日常学习随笔-数组、单链表、双链表三种形式实现栈结构的基本操作

一.栈结构 栈(stack)是限制插入和删除只能在一个位置上的表,该位置是 表的末端,叫做栈的顶(Top).对栈的基本操作有push(进栈),pop(出栈),peak(栈顶元素),size(栈容量)等. 栈的核心思想:"先进后出". 二.案例一:数组实现"栈" 1 package com.xfwl.algorithmAnalysis.stack; 2 3 import java.util.Arrays; 4 5 /** 6 * 自定义栈结构(基于数组的形式) 7 *