1、创建节点类

public class CNode<T> {
public CNode prev;
public CNode next;
public T data; public CNode() {
} public CNode(T data) {
this.data = data;
}
}

2、实现类

public class DoubleLinkNode<T> {

    /**
* 初始化
*
* @param head
*/
public void init(CNode head) {
head.prev = head;
head.next = head;
} /**
* 插入
*
* @param head:插入对应链表
* @param index:插入的位置
* @param element: 对应位置插入的元素
*/
public void insert(CNode head, int index, T element) {
CNode temp = head;
CNode<T> newnode = new CNode<>(element);
int j = -1;
while (temp.next != head && j < index - 1) {
temp = temp.next;
j++;
} if (j != index - 1) {
System.out.println("插入的下标有问题");
return;
}
newnode.next = temp.next;//---->
temp.next.prev = newnode;//<----
newnode.prev = temp;//---->
temp.next = newnode;//<---
} /**
* 删除
* @param head:所要删除的链表
* @param index :删除的元素下标
*/
public void delete(CNode head, int index) {
CNode temp = head;
int j = -1;
if (temp.next == head) {
System.out.println("链表为空,没有元素可删除");
return;
}
while (temp.next.next != head && j < index - 1) {
temp = temp.next;
j++;
} if (j != index - 1) {
System.out.println("删除元素位置下标出错");
return;
}
temp.next = temp.next.next;
temp = temp.next.next.prev;
} public void indexGetElement(CNode head,int index) {
CNode temp = head;
int j = -1;
if (temp.next == head){
System.out.println("为空,无法获取你要的值");
return;
}
while (temp.next != head && j< index){
temp = temp.next;
j++;
}
if (j != index){
System.out.println("您给的下标有问题");
return;
}
System.out.println("您要获取的值:"+temp.data);
} /**
* 求当前元素个数
*
* @param head
*/
public void getLength(CNode head) {
CNode temp = head;
int length = 0;
if (temp.next == head) {
System.out.println("链表为空,长度为0");
return;
}
while (temp.next != head) {
temp = temp.next;
length++;
}
System.out.println("长度为: " + length);
} /**
* 打印
*
* @param head
*/
public void print(CNode head) {
CNode temp = head;
if (temp.next == head) {
System.out.println("链表为空,没有可打印元素");
return;
}
while (temp.next != head) {
temp = temp.next;
System.out.print(temp.data + " ");
}
System.out.println();
} public static void main(String[] args) {
CNode<Integer> cNode = new CNode<>();
DoubleLinkNode doubleLinkNode = new DoubleLinkNode();
doubleLinkNode.init(cNode);
doubleLinkNode.indexGetElement(cNode,0); doubleLinkNode.insert(cNode, 0, 8);
doubleLinkNode.insert(cNode, 0, 7);
doubleLinkNode.getLength(cNode);
doubleLinkNode.print(cNode);
for (int i = 0; i < 5; i++) {
doubleLinkNode.insert(cNode, i, i);
} doubleLinkNode.print(cNode);
doubleLinkNode.getLength(cNode); doubleLinkNode.delete(cNode,6);
doubleLinkNode.print(cNode);
doubleLinkNode.getLength(cNode); doubleLinkNode.indexGetElement(cNode,5);
}
}

3、实验结果

为空,无法获取你要的值
长度为: 2
7 8
0 1 2 3 4 7 8
长度为: 7
0 1 2 3 4 7
长度为: 6
您要获取的值:7

最新文章

  1. swift项目导入OC框架
  2. python面试总结
  3. http://stackoverflow.com/questions/6065169/requestanimationframe-with-this-keyword
  4. IE8以下版本iframe出现滚动条和内容空白问题
  5. Effective Java 55 Optimize judiciously
  6. Effective Java 65 Don&#39;t ignore exceptions
  7. 在多线程中进行UI操作
  8. lvm基础
  9. Android开发 第一篇
  10. html实现 页面禁止右键 禁止复制 禁止图片拖动 禁止复制和剪切
  11. 剑指OFFER——顺时针打印矩阵
  12. 从底层角度看ASP.NET-A low-level Look at the ASP.NET...
  13. 初识函数库libpcap
  14. python之并发编程
  15. BZOJ-8-2115: [Wc2011] Xor
  16. apache atlas资料收集
  17. Python:windows下scikit-learn 安装和更新
  18. Golang Context 详细介绍
  19. python3之模板pycurl探测web服务质量
  20. POJ 3667 Hotel(线段树+区间合并)

热门文章

  1. PCB学习总结
  2. java中的各种锁详细介绍
  3. 集合中Iterator迭代器的使用以及实现原理。
  4. 根据屏幕分辨率判断当前手机型号(swift4.1)
  5. IT人不仅要提升挣钱能力,更要拓展挣钱途径
  6. unity之中级工程师
  7. 常用maven整合
  8. Spring 核心技术(7)
  9. 矩阵之间无循环计算L2距离
  10. library not found for -ljpush-ios-3.2.1错误