public class ArrayList < E > extends AbstractList < E >implements List < E > , RandomAccess , Cloneable , java . io . Serializable{// ...// 默认容量是 10private static fifinal int DEFAULT_CAPACITY = 10 ;//...// 数组:用来存储元素transient Object [] elementData ; // non-private to simplify nested class access// 有效元素个数private int size ;public ArrayList ( int initialCapacity ) {if ( initialCapacity > 0 ) {this . elementData = new Object [ initialCapacity ];} else if ( initialCapacity == 0 ) {this . elementData = EMPTY_ELEMENTDATA ;} else {throw new IllegalArgumentException ( "Illegal Capacity: " +initialCapacity );}}// ...}
- // 1、无头单向非循环链表实现
- public class SingleLinkedList
- {
- //头插法
- public void addFirst(int data);
- //尾插法
- public void addLast(int data);
- //任意位置插入,第一个数据节点为0号下标
- public boolean addIndex(int index,int data);
- //查找是否包含关键字key是否在单链表当中
- public boolean contains(int key);
- //删除第一次出现关键字为key的节点
- public void remove(int key);
- //删除所有值为key的节点
- public void removeAllKey(int key);
- //得到单链表的长度
- public int size();
- public void display();
- public void clear();
- }
9 给定一个链表,判断链表中是否有环。
10. 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL
11. 题库
牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)
- // 2、无头双向链表实现
- public class MyLinkedList
- {
- //头插法
- public void addFirst(int data);
- //尾插法
- public void addLast(int data);
- //任意位置插入,第一个数据节点为0号下标
- public boolean addIndex(int index,int data);
- //查找是否包含关键字key是否在单链表当中
- public boolean contains(int key);
- //删除第一次出现关键字为key的节点
- public void remove(int key);
- //删除所有值为key的节点
- public void removeAllKey(int key);
- //得到单链表的长度
- public int size();
- public void display();
- public void clear();
- }
在集合框架中,LinkedList也实现了List接口,具体如下:
LinkedList (Java Platform SE 8 ) (oracle.com)
- public static void main(String[] args)
- {
- // 构造一个空的LinkedList
- List
list1 = new LinkedList<>(); - List
list2 = new java.util.ArrayList<>(); - list2.add("JavaSE");
- list2.add("JavaWeb");
- list2.add("JavaEE");
- // 使用ArrayList构造
- LinkedList List
list3 = new LinkedList<>(list2); - }
List (Java Platform SE 8 ) (oracle.com)
- public static void main(String[] args)
- {
- LinkedList
list = new LinkedList<>(); - list.add(1); // add(elem): 表示尾插
- list.add(2);
- list.add(3);
- list.add(4);
- list.add(5);
- list.add(6);
- list.add(7);
- System.out.println(list.size());
- System.out.println(list);
-
- // 在起始位置插入0
- list.add(0, 0); // add(index, elem): 在index位置插入元素elem
- System.out.println(list);
-
- list.remove(); // remove(): 删除第一个元素,内部调用的是removeFirst()
- list.removeFirst(); // removeFirst(): 删除第一个元素
- list.removeLast(); // removeLast(): 删除最后元素
- list.remove(1); // remove(index): 删除index位置的元素
- System.out.println(list);
-
- // contains(elem): 检测elem元素是否存在,如果存在返回true,否则返回false
- if(!list.contains(1))
- {
- list.add(0, 1);
- }
- list.add(1);
- System.out.println(list);
- System.out.println(list.indexOf(1)); // indexOf(elem): 从前往后找到第一个elem的位置
- System.out.println(list.lastIndexOf(1)); // lastIndexOf(elem): 从后往前找第一个1的位置
- int elem = list.get(0); // get(index): 获取指定位置元素
- list.set(0, 100); // set(index, elem): 将index位置的元素设置为
- elem System.out.println(list);
-
- // subList(from, to): 用list中[from, to)之间的元素构造一个新的LinkedList返回
- List
copy = list.subList(0, 3); - System.out.println(list);
- System.out.println(copy);
- list.clear(); // 将list中元素清空
- System.out.println(list.size());
- }
- public static void main(String[] args)
- {
- LinkedList
list = new LinkedList<>(); - list.add(1); // add(elem): 表示尾插
- list.add(2);
- list.add(3);
- list.add(4);
- list.add(5);
- list.add(6);
- list.add(7);
- System.out.println(list.size());
- // foreach遍历
- for (int e:list)
- {
- System.out.print(e + " ");
- }
- System.out.println();
- // 使用迭代器遍历---正向遍历
- ListIterator
it = list.listIterator(); - while(it.hasNext())
- {
- System.out.print(it.next()+ " ");
- }
- System.out.println();
- // 使用反向迭代器---反向遍历
- ListIterator
rit = list.listIterator(list.size()); - while (rit.hasPrevious())
- {
- System.out.print(rit.previous() +" ");
- }
- System.out.println();
- }