面试题:自己编写双向链表(不限语言)
来源:互联网 发布:扫雷技巧红包软件 编辑:程序博客网 时间:2024/05/20 06:25
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;// 当前节点的内容
}
}
/**
* 面试题:自己编写双向链表(不限语言)
*
* @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;// 当前节点的内容
}
}
阅读全文
0 0
- 面试题:自己编写双向链表(不限语言)
- C语言的宏编写(面试题)
- 经典面试题--两个双向链表删除相同值
- 面试题1:二叉树变双向链表
- 面试题之双向链表简单详述
- 面试题24:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题:搜索二叉树转双向链表
- 面试题27:二叉排序树转双向链表
- 上海xx 双向链表 面试题 list node
- 【面试题】二叉搜索树转换双向链表
- 面试题27二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题31:二叉搜索树与双向链表
- 面试题27:二叉搜索树和双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- docker 如何批量删除镜像
- lintcode--不同的二叉查找树II
- 第四篇:类加载机制
- 使用pylint 规范python代码
- 微信群发,图文消息
- 面试题:自己编写双向链表(不限语言)
- 自定义自适应的TabLayout
- 简单的饼状图
- 闭包
- MySQLdayday05(创建个表 数据类型 默认编码表 默认值 增删改 约束 )
- 第五篇:多态性实现机制——静态分派与动态分派
- UVA 1153 Keep the Customer Satisfied
- Spring的AOP开发实战和疑问解析
- 代码智能感知——Visual Assist X