package com.soto.collection; /** * add 和 get方法 * * @author 王 * */ public class SxtLinkedList /*implements List*/ { //双向链表, private Node first; //(第一个结点)链,获得第一个,就能继续往下找了 private Node last; //(最后一个结点)链表由结点组成,对象放结点里了 private int size; public void add(Object obj){ Node n = new Node(); if(first == null){ n.setPrevious(null); n.setObj(obj); n.setNext(null); first = n; last = n; }else { //直接在last结点后增加新的结点 n.setPrevious(last); n.setObj(obj); n.setNext(null); last.setNext(n); last = n; } size++; } public int size(){ return size; } public Object get(int index){ rangeCheck(index); Node temp = node(index); if(temp!=null){ return temp.obj; } return null; } private void rangeCheck(int index){ if(index<0||index>size){ try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } } public Node node(int index){ Node temp = null; if(first != null){ temp = first; for(int i=0;i<index;i++){ temp = temp.next; } } return temp; } public void remove(int index){ Node temp = null; if (first != null) { temp = first; for(int i =0 ; i<index;i++){ temp = temp.next; } if (temp!=null) { Node up = temp.previous; Node down = temp.next; up.next = down; down.previous = up; size--; } } } public void add(int index, Object obj){ Node temp = node(index); Node newNode = new Node(); newNode.obj = obj; if(temp !=null){ Node up = temp.previous; up.next = newNode; //双向 !! newNode.previous = up; newNode.next = temp; //双向!! temp.previous = newNode; size++; } } public static void main(String[] args) { SxtLinkedList list = new SxtLinkedList(); list.add("aaa"); list.add(1, "BBB"); list.add("bbb"); list.add("ccc"); // list.remove(1); System.out.println(list.get(1)); } }
Java 链表的底层实现
猜你喜欢
转载自blog.csdn.net/u013511642/article/details/70952881
今日推荐
周排行