我是靠谱客的博主 从容黑裤,最近开发中收集的这篇文章主要介绍【Java】手打双向链表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

package tset50;

public class MyLinkedList {
	private Node head; //头节点
	private int size;
    public MyLinkedList() {
    	head  = new Node(null); //一个空节点
    }
    /**
     * 在尾部添加
     * @param data
     */
    public void remove(int index) {
    	if(index >= size) {
    		throw new ArrayIndexOutOfBoundsException();
    	}
    	Node node =head;
    	int idx=-1;
    	while(idx!=index&&node.next!=null) {
    		++idx;
    		node = node.next;
    	}
    	if(node.next == null) {
    		node.pre.next=null;
    		node.pre=null;
    	}
    	else {
    		node.next.pre=node.pre;
    		node.pre.next=node.next;
    	}
    	node = null;
    	--size;
    }
    
    public void set(int index,Object data) {
    	if(index >= size) {
    		throw new ArrayIndexOutOfBoundsException();
    	}
    	Node node =head;
    	int idx=-1;
    	while(idx!=index&&node.next!=null) {
    		++idx;
    		node = node.next;
    	}
    	node.data=data;
    }
    
    public void add(Object data) {
    	Node temp = head;
    	while(temp.next!=null) {
    		temp= temp.next;
    	}
    	
    	
    	Node new_node = new Node(data);
    	temp.next = new_node;
    	new_node.pre = temp;//新节点的上一个节点是尾节点
    	++size;
    	
    }
    /**
     * 这么神奇?
     * @param data
     */
    public void addFirst(Object data) {
    	head.data=data;
    	Node new_node = new Node();
    	new_node.next=head;
    	head.pre = new_node;
    	head = new_node;
    	++size;
    }
    
    public int getSize() {
    	return size;
    }
    
    public String toString() {
    	if(head.next==null) {
    		
    		return "列表为空";
    	}
    	Node temp = head.next;
    	StringBuffer sbf = new StringBuffer();
    	while(temp!=null) {
    		sbf.append(temp.data+"t");
    		temp = temp.next;
    	}
    	return sbf.toString();
    }
    
    
    class Node{
    	Object data;
    	Node next;
    	Node pre;
    	
    	
		@Override
		public String toString() {
			return "Node [data=" + data + ", next=" + next + ", pre=" + pre + "]";
		}
		public Node() {
			super();
		}
		public Node(Object data) {
			super();
			this.data = data;
			this.next = null;
			this.pre = null;
		}
    	
    }
}


 // 测试类

package tset50;

public class TestMylinkList {
	public static void main(String[] args) {

	       MyLinkedList my = new MyLinkedList();
	       System.out.println(my);
	       my.add(1);
	       my.add(2);
	       my.addFirst(3);
	       my.addFirst(10);
	       my.add(20);
		   System.out.println(my);
		   my.remove(0);
		   System.out.println(my);
		   my.set(0, 100);
		   System.out.println(my);
	}
}

 

最后

以上就是从容黑裤为你收集整理的【Java】手打双向链表的全部内容,希望文章能够帮你解决【Java】手打双向链表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部