数据结构 链表 Java实现

最近在复习数据结构,用正在学的java把链表部分实现了一遍,包括基本的插入,删除,遍历,查找等方法,带头结点
package com.oracle.list;

public class MyList<E> {
    class Node {//结点内部类
    	private Object data;
    	private Node next;
		public Node(Object data) {
			super();
			this.data = data;
		}
		public Node() {
			super();
			this.data=null;
		}
		public Object getData() {
			return data;
		}
		public void setData(Object data) {
			this.data = data;
		}   	
    }   
    private Node head;//定义一个头结点
	private Node rear;//定义一个尾结点
	private Node node;//临时结点
	private int length;//长度
	/**
	 * 定义无参构造函数,初始化链表
	 */
	public MyList() {    
		head=new Node();
		this.rear=this.head;
		this.length=0;		
	}	
	/**
	 * 尾插法
	 */
	
	public void add(Object data) {
		node=new Node(data);
		rear.next=node;
		rear=node;
		length++;
	}
	
	/**
	 * 遍历输出链表
	 */
	public void printList() {
		node =head;		
		while(node.next!=null) {
			System.out.println(node.next.data);
			node=node.next;
		}
	}
	
	/**
	 * 获取链表的长度
	 */
	
	public int getSize() {
		return length;
	}
	
	
	/**
	 * 在i位置之后插入元素o
	 */
	public void insert(int i,Object o) {
		if(i>=0&&i<length) {
			Node n=new Node(o);
			node =getNode(i);
			n.next=node.next;
			node.next=n;
			length++;
	
		}else {
			System.out.println("插入该位置失败,该链表位置范围为0-"+(length-1));
		}
	
	}
	/**
	 * 获取该位置的一个值
	 */
	public Object get(int i) {
		return getNode(i).data;
	}	
		
	/**
	 * 获取该位置的结点,私有方法
	 */
	private Node getNode (int i) {
		if(i==-1) {
			return head;
		}//如果是第一个 ,返回头结点
		if(i>=0&&i<length) {
			node=head;			
			int j=0;
			while(node!=null&&j!=i) {
				node=node.next;
				j++;
			}
			return node.next;
		}else {
			return null;
		}
	}
		
	/**
	 * 删除该位置元素,并且返回该元素的值
	 */
	public void delete(int i) {
		if(i>=0&&i<length) {	
			node=getNode(i-1);//获取该位置前一个元素			
			node.next=node.next.next;
			length--;
		}else {
			System.out.println("位置错误噢");			
		}		
	}
	/*设置某个位置的值
	 * 
	 */
	public void set(int i,Object data) {
		node =getNode(i);
		node.data=data;
	}  
}

猜你喜欢

转载自blog.csdn.net/qq_39147516/article/details/79232271