您的位置:首页 > 编程语言 > Java开发

java双向链接表LinkedList的编写模拟实现

2017-12-13 17:54 609 查看

1.双向链表LinkedList的特点

      查询,更改较慢,新增和删除较快。

2.代码模拟

public class MyLinkedList {
private Node first;
private Node last;
private int size;

class Node {
Node prev;
Node next;
Object ele;

Node(Object ele) {
this.ele = ele;
}
}

// 添加头元素
public void addFirst(Object ele) {
Node node = new Node(ele);
if (size == 0) {
this.first = node;
this.last = node;
} else {
this.first.prev = node;
node.next = this.first;
this.first = node;
}
size++;
}

//	添加尾元素
public void addLast(Object ele) {
Node node = new Node(ele);
if (size == 0) {
this.first = node;
this.last = node;
} else {
this.last.next = node;
node.prev = this.last;
this.last = node;
}
size++;
}

//删除指定内容的元素,注意:元素个数至少2个以上,否则移除头尾元素会空指针异常
public void remove(Object ele) {
Node current = this.first;
for (int i = 0; i < size; i++) {
if (!ele.equals(current.ele)) {
if (current.next == null) {
return;
}
current = current.next;
}
}
if (current == this.first) {
this.first = current.next;
this.first.prev = null;
} else if (current == this.last) {
this.last = current.prev;
this.last.next = null;
} else {
current.prev.next = current.next;
current.next.prev = current.prev;
}
size--;
}

//	获取元素的个数
public int size() {
return size;
}

// 打印链表中的元素
public String toString() {
Node current = this.first;
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(current.ele);
if (i != (size - 1)) {
sb.append(",");
}
current = current.next;
}
sb.append("]");
return sb.toString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: