实现类,只实现了几个比较简单的功能
package 链表.双向链表;
/**
* @program: 数据结构
* @description: 双向链表的实现
* @author: zhongyusen
* @create: 2019-05-31 21:45
*/
public class MyLinkList {
public Node head;
public Node last;
public int size;
public MyLinkList(){
this.head=null;
this.last=null;
this.size=0;
}
public void add(Object object){
Node node = new Node();
if (null == head) {
//如果是第一个节点
node.setPre(null);//把新的最后一个节点建好
node.data=object;
node.setNext(null);
head = node;
last = node;
} else {
node.setPre(last);
node.data=object;
node.setNext(null);
last.setNext(node);//指向新的最后一个节点
last = node;
}
size++;
}
public void addhead(Object object){
Node node=new Node();
if(size==0){
node.setData(object);
node.setNext(null);
node.setPre(null);
head=node;
last=node;
}
else {
node.setData(object);
node.setNext(head);
node.setPre(null);
head.setPre(node);
head=node;
}
size++;
}
public Node get(int index){
if(index<0||index>=size){
System.out.println("越界");
return null;
}
else {
Node temp=head;
for(int i=0;i<index;i++){
temp=temp.next;
}
return temp;
}
}
public void del(int index){
if(index<0||index>=size){
System.out.println("越界");
return ;
}
if(size==1){
head=null;
last=null;
size--;
return;
}
if(index==0){
Node temp=head.next;
temp.setPre(null);
head=temp;
size--;
return;
}
if(index==size-1){
Node node=last.pre;
node.setNext(null);
last=node;
size--;
return;
}
Node node=get(index);
Node pre=node.pre;
Node next=node.next;
pre.setNext(next);
next.setPre(pre);
size--;
}
public class Node{
private Object data;
private Node next;
private Node pre;
public Node(Object data){this.data=data;}
public Node(){}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Node getPre() {
return pre;
}
public void setPre(Node pre) {
this.pre = pre;
}
}
@Override
public String toString(){
if(size==0){
return "[]";
}
else {
StringBuilder stringBuilder=new StringBuilder();
Node temp=head;
stringBuilder.append("["+temp.data);
while (temp.next!=null){
stringBuilder.append("->"+temp.next.data);
temp=temp.next;
}
stringBuilder.append("]");
return stringBuilder.toString();
}
}
}
测试类
public class 测试 {
public static void main(String[] args) {
MyLinkList myLinkList=new MyLinkList();
myLinkList.add("1");
myLinkList.add("2");
myLinkList.add("3");
myLinkList.addhead("0");
myLinkList.del(1);
System.out.println(myLinkList.toString());
System.out.println(myLinkList.head.getNext().getData());
System.out.println(myLinkList.get(1).getData());
}
}
花费一天的时间去用自己的代码实现队列链表栈的实现,对这几个数据结构有了新的认识,大概就是内部类Node这个是之前没有想到的把。。。(当然也可以把它不当作内部类来写)