网上看到的代码,非常不错。只实现了add()和get()方法。
public class LinkedList<E> {
int size = 0;
Node<E> head = new Node<E>(null, null, null);
public LinkedList() {
head.next = head.previous = head;
}
public void add(E date) {
//核心 循环双向链表
Node<E> newNode = new Node<E>(head.previous, date, head); //新节点的prev指向头结点的prev 新节点的next指向头结点
newNode.previous.next = newNode; //调整,新节点的前一个的后一个
newNode.next.previous = newNode; //调整,新节点的后一个的前一个
size++;
}
public E get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index:" + index + ",size:" + size);
}
Node<E> node = head;
if (index < (size >> 1)) {
for (int i = 0; i <= index; i++) { //head是哑元,i<=index当index=0时,返回head.next
node = node.next; //对头结点进行迭代
}
}else{
for(int i=size;i>index;i--){
node=node.previous;
}
}
return node.getData();
}
public int size() {
return size;
}
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
System.out.println("list.get(3)="+list.get(3));
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
class Node<E> {
E data;
Node<E> next;
Node<E> previous;
public Node(Node<E> previous, E data, Node<E> next) {
this.data = data;
this.next = next;
this.previous = previous;
}
public E getData(){
return data;
}
public void setData(E data){
this.data=data;
}
}
}
运行结果:
C:\test>java LinkedList
list.get(3)=4
1
2
3
4
5
6
7
8
分享到:
相关推荐
利用双向循环链表来实现对长整数的存储。每个节点只存储四位十进制数字。选择该数据结构来完成长整数的加减运算是因为要对长整数进行运算,需要对长整数进行存储,所以选择用链表对长整数存储,又由于存储的顺序是从...
数据结构课程设计报告基于双向循环链表的通讯录设计
Linux操作系统中通用双向循环链表的实现分析.pdf
C++实现的带头结点的双向循环链表, 数据结构课设.。
用单向链表存储航班信息,双向链表存储乘客信息,并可以订票,退票和查询的航班订票系统!
本人自己编写的双向循环链表源码,分享给大家,存在什么问题请指出
C语言版双向循环链表,双向循环链表经典程序,用于指针进行编写的C语言程序。。。
使用C++实现的双向循环链表,支持定点插入,定点删除,正/逆向输出等功能,欢迎审阅
双向循环链表 C++实现 双向循环链表 C++实现 双向循环链表 C++实现 双向循环链表 C++实现 双向循环链表 C++实现
双向循环链表的程序,包括循环链表的生成,链表结点的插入和删除。
单链表实现双向循环链表单向链表存在一个弊端就是,当需要获取某个结点p的前驱时,需要从头指针开始遍历链表,获得“前驱”的执行时间为O(n),为了克服单向链表的这种缺点,可以利用双向链表。在双向链表中有两个...
双向循环链表解决约瑟夫实验报告, 双向循环链表解决约瑟夫实验报告 双向循环链表解决约瑟夫实验报告双向循环链表解决约瑟夫实验报告
双向循环链表,队列,代码详细实现,已进行详细备注。
数据结构课程设计实现双向循环链表,我这有详细的课程设计说明书以及答辩ppt,有需要的可以留言哈 ,仅供参考 嘿嘿
利用了双向循环链表实现了快速排序算法
一个精简的双向循环链表C语言实现,与大家共享
用C++和Java实现带头节点的双向循环链表,要继承linearList类,并实现它的所有功能,另外,必须实现双向迭代器。 实现带头节点的双向循环链表,要具有以下的功能: 判断表是否为空,如果为空则返回true,不空返回...
给出了双向循环链表的定义、介绍,提供了双向循环链表的建立插入与删除源代码
双向的循环链表的C++源代码 实现正逆序遍历,链表归并,插入,删除,查询等基本操作
这是使用VC6.0实现的双向循环链表操作的程序,实现了查找元素,查找前驱后继等功能,并在MFC界面下实现了链表操作的具体过程。