链表的遍历,查询和修改
public class LinkedList<E> { private class Node { public E e; public Node next; public Node(E e, Node next) { this.e = e; this.next = next; } public Node(E e) { this.e = e; this.next = null; } public Node() { this.e = null; this.next = null; } @Override public String toString() { return e.toString(); } } private Node dummyHead; int size; public LinkedList() { dummyHead = new Node(null, null); size = 0; } //可以尝试传进来一个数组,把数组转换成链表的构造函数 //获取链表中的元素个数 public int getSize() { return size; } //返回链表是否为空 public boolean isEmpty() { return size == 0; } //在链表头添加新的元素e public void addFirst(E e) { add(0,e); } //在链表的index(o-based)位置添加新的元素e //在链表中不是一个常用的操作,练习用:) public void add(int index, E e) { if (index < 0 || index > size) throw new IllegalArgumentException("Add failed.Illegal index."); Node prev = dummyHead; for (int i = 0; i < index; i++) { prev = prev.next; } prev.next = new Node(e, prev.next); size++; } //在链表末尾添加新的元素e public void addLast(E e) { add(size, e); } //获得链表的第index(o-based)个位置的元素e //在链表中不是一个常用的操作,练习用:) public E get(int index){ if (index < 0 || index > size) throw new IllegalArgumentException("Get failed.Illegal index."); Node cur = dummyHead.next; for(int i = 0; i < index ; i ++) cur = cur.next; return cur.e; } //获取链表的第一个元素 public E getFirst(){ return get(0); } //获取链表的最后一个元素 public E getLast(){ return get(size - 1); } //修改链表的在第index(o-based)个位置的元素为e //在链表中不是一个常用的操作,练习用:) public void set(int index,E e){ if (index < 0 || index > size) throw new IllegalArgumentException("Set failed.Illegal index."); Node cur = dummyHead.next; for (int i = 0; i < index; i++) { cur = cur.next; } cur.e = e; } //查找链表中是否存在元素e public boolean contains(E e){ Node cur = dummyHead.next; while( cur != null){ if(cur.e.equals(e)){ return true; } cur = cur.next; } return false; } @Override public String toString(){ StringBuilder res = new StringBuilder(); Node cur = dummyHead.next; while( cur != null){ res.append(cur + "->"); cur = cur.next; } res.append("null"); return res.toString(); } }
Main方法运行
public class Main { public static void main(String[] args) { LinkedList<Integer> linkedList = new LinkedList<>(); for(int i = 0 ; i < 5; i ++){ linkedList.addFirst(i); System.out.println(linkedList); } linkedList.add(2,666); System.out.println(linkedList); } }
运行结果:
0->null 1->0->null 2->1->0->null 3->2->1->0->null 4->3->2->1->0->null 4->3->666->2->1->0->null