java LinkedList 链表

import javax.print.attribute.Size2DSyntax;
import javax.xml.transform.Templates;
import javax.xml.ws.AsyncHandler;

public class LinkedList<E> {
	private Node last;
	private Node first;
	private int size;
	
	public void add(E element) {
		Node node = new Node(element);
		if(first == null) {
			last = node;
			first = node;
		}else {
			node.previuos = last;
			node.next = null;
			last.next = node;
			last = node;
		}
		size ++;
	}
	
	private void checkRange(int index) {
		if (index < 0 || index > size - 1) {
			throw new RuntimeException("索引值超过链表长度");
		}
	}
	
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder("[");
		Node temp = first;
		while(temp != null) {
			sb.append(temp.element + ",");
			temp = temp.next;
		}
		sb.setCharAt(sb.length() -1, ']');
		return sb.toString();
	}
	
	public E get(int index) {
		checkRange(index);
		Node temp = getNode(index);
		return temp!=null?(E)temp.element:null;
	}
	
	private Node getNode(int index) {/*通过索引获得节点*/
		checkRange(index);
		Node temp = first;
		for (int i = 0; i < index; i++) {
			temp = temp.next;
		}
		return temp;
	}
	
	public void remove(int index) {/*删除方法*/
		checkRange(index);
		Node node = getNode(index);
		if(node !=null) {
			Node previuosNode = node.previuos;
			Node nexNode = node.next;
			if(previuosNode != null) {
				previuosNode.next = nexNode;
			}
			if(nexNode != null) {
				nexNode.previuos = previuosNode;
			}
			if (index ==0) {
				first = nexNode;
			}
			else if (index == size - 1) {
				last = previuosNode;
			}
			size --;
		}
	
		
	}

	public void insert(int index,E element) {
		checkRange(index);
		Node newNode = new Node(element);
		Node node = getNode(index);
		if (node != null) {
			Node preNode = node.previuos;
			Node nexNode = node.next;
			if (preNode != null && nexNode != null) {
				node.previuos = newNode;
				preNode.next = newNode;
				newNode.previuos = preNode;
				newNode.next = node;
			}else {
				if (index == 0) {
					first = newNode;
					node.previuos = newNode;
					newNode.previuos = null;
					newNode.next = node;
				}else if (index == size - 1) {
					last = newNode;
					node.next = newNode;
					newNode.previuos = node;
					newNode.next = null;	
				}
			}
			size ++;
		}

	}
	
	public static void main(String[] args) {
		LinkedList<String> l1 = new LinkedList();
		l1.add("a");
		l1.add("b");
		l1.add("333");
		l1.add(1111);
		l1.insert(l1.size - 1, "1321");
		System.out.println(l1);


	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值