实现自己的LinkedList
来源:互联网 发布:linux 窗口编程工具 编辑:程序博客网 时间:2024/05/22 15:21
public class SimpleLinkedList<T>{ private static class Node<T> { T data; Node<T> next; public Node(T t, Node<T> n) { this.data = t; this.next = n; } public String toString() { return "(data=" + data + ")"; } } private int size = 0; /** * 记录list被修改结构的次数 */ private int modCount = 0; private Node<T> head; public SimpleLinkedList(int size) { this.size = size; clear(); } /** * clear the whole list */ public void clear() { head = new Node<T>(null, null); this.size = 0; modCount++; } public boolean isEmpty() { return size == 0; } /*** * 每次都在最前端插入<br> * * @param x * @return */ public boolean add(T x) { Node<T> t = new Node<T>(x, head.next); head.next = t; size++; modCount++; return true; } /*** * id表示第id个元素,head为第0个,依次类推<br> * * @param id * @return */ public T get(int id) { if (id > size) return null; Node<T> temp; for (temp = head; id > 0; temp = temp.next, id--) { } return temp.data; } public T set(int id, T newValue) { if (id > size || id < 1) return null; Node<T> temp; for (temp = head; id > 0; temp = temp.next, id--) { } T oldValue = temp.data; temp.data = newValue; return oldValue; } public T remove(int id) { Node<T> temp = head; for (; id > 1; temp = temp.next, id--) { } T value = temp.next.data; temp.next = temp.next.next; size--; return value; } /*** * 借助先进先出队列进行reverse操作<br> * 逻辑简单,但是效率不高<br> * * @return */ public void reverse_1() { // Stack<Node<T>> stack = new Stack<Node<T>>(); Queue<Node<T>> queue = new LinkedList<>(); Node<T> te = head; while (te.next != null) { te = te.next; queue.add(te); } /** * 清空原来的链表,重新建表<br> */ clear(); while (!queue.isEmpty()) { add(queue.poll().data); } } /*** * 反转链表 基本思想:逐个节点拆开,建一个新的list<br> */ public void reverse_2() { Node<T> newHead = new Node<T>(null, null); while (head.next != null) { Node<T> temp = head.next; head.next = head.next.next; temp.next = newHead.next; newHead.next = temp; } head = newHead; } public String toString() { StringBuilder b = new StringBuilder(); Node<T> temp = head.next; for (int i = 0; i < size; i++, temp = temp.next) { b.append(temp.toString() + "->"); } b.append("NULL"); return b.toString(); } public Iterator<T> iterator() { return new LinkedListIterator(); } private class LinkedListIterator implements Iterator<T> { Node<T> current = head; @Override public boolean hasNext() { return current.next != null; } @Override public T next() { if (hasNext()) { current = current.next; return current.data; } return null; } } public static void main(String[] ar) { SimpleLinkedList<Integer> list = new SimpleLinkedList<Integer>(10); for (int i = 0; i < 10; i++) { list.add(i); } System.out.println(list); System.out.println("Get an element : (data=" + list.get(6) + ")"); // System.out.println("Remove an element : (data=" + list.remove(6) + // ")"); System.out.println("Remove an element : (data=" + list.set(6, 110) + ")"); System.out.println("\nOriginal list : " + list); list.reverse_1(); System.out.println("List after reversed_1 : " + list); list.reverse_2(); System.out.println("List after reversed_2 : " + list); /*** * Iterator */ Iterator<Integer> it = list.iterator(); while (it.hasNext()) System.out.println("it.next = " + it.next()); }}
0 0
- 实现自己的LinkedList
- 自己实现的LinkedList
- java自己实现的linkedlist
- 用LinkedList实现自己的Stack
- 【java集合】自己实现简易的LinkedList
- 自己实现LinkedList
- 自己实现LinkedList底层
- JAVA--自己实现LinkedList
- 编写自己的LinkedList
- 自己实现单向链表讨论一下LinkedList的效率
- java8集合框架LinkedList类实现自己简单的理解
- Java之实现自己的ArrayList与LinkedList
- 使用LinkedList作为基层实现,定义自己的TreeSet
- 自己实现Java中基于双向链表的LinkedList
- 自己写的一个linkedList
- 自己写简单的LinkedList
- 自己实现LinkedList集合add,get,remove
- 自己实现链表数据结构 LinkedList
- USACO 1.3 Wormholes
- 【MNIST/Python】手写体数字训练/测试数据集(图片格式)下载及分割预处理
- spring 处理乱码的一个非常规方法
- linux学习心得
- time_wheel
- 实现自己的LinkedList
- BinarySearch 有序表的二分查找
- UVM的构造函数new的个人理解
- Bootstrap3.0入门学习系列教程
- win10 系统禁用笔记本自带键盘的有效方法
- Android Toast用法大全
- 06-每天一个Linux命令 rmdir
- Acticity A跳转到Activity B 启动方式为startActivityForResult(携带标签属性启动)
- jQuery学习教程十八: jQuery 遍历