您的位置:首页 > 职场人生

面试题:自己编写双向链表(不限语言)

2017-08-17 09:06 337 查看
package jihe;

/**

 * 面试题:自己编写双向链表(不限语言)

 * 

 * @author wengshaobo addLast()-->addFist()-->remove()-->removeFirst()-->removeLast()

 * search()

 */

public class MyLinked {

private Node first;
private Node last;
private int 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++;

}

public void addFirst(Object ele) {
Node node = new Node(ele);
if (size == 0) {
this.first = node;
this.last = node;
} else {
node.next = this.first;// 把之前的第一个节点当做新增节点的下一个节点
this.first.prev = node;// 把之前的第一个节点的上一个节点直线新增进来的节点
this.first = node;// 把新增节点作为第一个节点
}

size++;

}

public boolean search(Object ele){
Node node = this.first;
for (int i = 0; i < size; i++) {
if (!node.ele.equals(ele)) {
if (node.next == null) {

  return false;
}
node = node.next;
}
}
return true;
}

public void remove(Object ele) {
// 找到要删除的节点是否存在
Node node = this.first;
for (int i = 0; i < size; i++) {
if (!node.ele.equals(ele)) {
if (node.next == null) {
System.out.println("链表中没有" + ele + "内容");
return;
}
node = node.next;
}
}

if (node == this.first) {
this.first = node.next;
this.first.prev = null;
} else if (node == this.last) {
this.last = node.prev;
this.last.next = null;
} else {
node.prev.next = node.next;
node.next.prev = node.prev;
}

size--;

}

@Override
public String toString() {

if (size == 0) {
return "[]";
}

StringBuilder stringBuilder = new StringBuilder();

Node node = this.first;
stringBuilder.append("[");

for (int i = 0; i < size; i++) {
stringBuilder.append(node.ele);
if (i != size - 1) {
stringBuilder.append(",");
} else {
stringBuilder.append("]");
}

node = node.next;// 走向下一个节点

}

System.out.println(this.first.ele);
System.out.println(this.last.ele);

return stringBuilder.toString();
}

class Node {

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

Node next;// 下一个节点
Node prev;// 上一个节点
Object ele;// 当前节点的内容
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题 集合