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