(用来做笔记,欢迎交流讨论!)
程序包含以下几个方法:
1.public void add(T data, int i) //在第i个位置处插入节点
2.public void remove(int i) //删除第i个位置处的节点
3.public void removeData(T data) //删除值为data的第一个节点
4.public void length() //如果没有size,求表长
5. public void searchIndex(int i) //按序号(第几个位置)查找节点
6. public void searchData(T data) //按data查找节点
7.public void print() //遍历打印
贴上代码:
package com.fei.example.lib;
public class DLinkedList<T> {
public class Node {
private T data;
private Node prior;
private Node next;
public Node(T data) {
this.data = data;
}
}
private Node head;
private int size;
public DLinkedList() {
head = new Node(null);
size = 0;
}
//在第i个位置处插入节点
public void add(T data, int i) {
if (i <= 0 || i > size + 1) {
System.out.println("插入失败,插入位置" + i + "错误");
return;
}
Node preNode = head;
Node node = new Node(data);
int count = 0;
while (count != i - 1) {
preNode = preNode.next;
count++;
}
node.next = preNode.next;
if (preNode.next != null) {
preNode.next.prior = node;
}
node.prior = preNode;
preNode.next = node;
size++;
}
//删除第i个位置处的节点
public void remove(int i) {
if (i <= 0 || i > size) {
System.out.println("删除失败,第" + i + "个位置上的节点不存在");
return;
}
Node preNode = head;
Node node = preNode.next;
int count = 0;
while (count != i - 1) {
preNode = preNode.next;
count++;
}
preNode.next = node.next;
node.next.prior = preNode;
size--;
}
//删除值为data的第一个节点
public void removeData(T data) {
if (size == 0) {
System.out.println("该链表为空");
return;
}
Node preNode = head;
Node node = head.next;
while (!node.data.equals(data)) {
preNode = preNode.next;
node = node.next;
if (node == null) {
System.out.println("删除失败,值为" + data + "的节点不存在");
return;
}
}
preNode.next = node.next;
node.next.prior = preNode;
size--;
}
//如果没有size,求表长
public void length() {
int count = 0;
Node node = head.next;
while (node != null) {
node = node.next;
count++;
}
System.out.println(count);
}
//按序号(第几个位置)查找节点
public void searchIndex(int i) {
if (i <= 0 || i > size) {
System.out.println("查找失败,第" + i + "个位置上的节点不存在");
return;
}
Node node = head.next;
int count = 1;
while (count != i) {
node = node.next;
count++;
}
System.out.println(node.data);
}
//按data查找节点
public void searchData(T data) {
Node node = head.next;
while (!node.data.equals(data)) {
node = node.next;
if (node == null) {
System.out.println("查找失败,值为" + data + "的节点不存在");
return;
}
}
System.out.println(node.data);
}
//遍历打印
public void print() {
Node node = head.next;
while (node != null) {
System.out.print(node.data + " ");
node = node.next;
}
System.out.println();
}
public static void main(String[] args) {
DLinkedList<String> list = new DLinkedList<>();
list.add("100", 1);
list.add("200", 2);
list.add("400", 3);
list.add("300", 3);
list.add("500", 5);
list.add("700", 7);
list.print();
list.remove(6);
list.remove(1);
list.removeData("700");
list.removeData("200");
list.print();
list.searchIndex(2);
list.searchData("400");
list.searchIndex(4);
list.length();
}
}