public class LinkList { private static class Node {//链表的结点 int element;//存储的元素 LinkList.Node next;// 下个指针 public Node() { } public Node(int element) { this.element = element; } @Override public String toString() { return "Node{" + "element=" + element + ", next=" + next + '}'; } } private Node first;//链表头部 private Node tail;//链表尾部 private int size;//链表元素个数 public LinkList() { size = 0; } public void addFirst(int element) {//链表头部加入元素 if (size == 0) { first = new Node(); first.element = element; first.next = null; tail = first; } else { Node temp = first; first = new Node(); first.element = element; first.next = temp; } size++; } public void addLast(int element) {//尾部加入元素 if (size == 0) { addFirst(element); } else { Node temp = tail; tail = new Node(); tail.element = element; tail.next = null; temp.next = tail; size++; } } public void addAt(int idx, int element) {//指定下标加入元素 if (idx == 0) { addFirst(element); } else if (idx == (size - 1)) { addLast(element); } else { Node now = new Node(element); Node front = getNodeAt(idx - 1); Node after = front.next; front.next = now; now.next = after; size ++; } } public Node getFirst() {//获取头部结点 return first; } public Node getLast() {//获取尾部结点 return tail; } public int getAt(int idx) {//根据下标获取元素 return getNodeAt(idx).element; } public Node getNodeAt(int idx) {//根据下标获取结点 if (idx > size) { return null;// or exception } Node temp = first; for (int i = 0; i < idx; i++) { temp = temp.next; } return temp; } public void removeFirst(){//删除第一个结点 if (size == 1) { first = null; tail = null; } else { first = first.next; } } public void removelast(){//删除最后一个结点 Node front = getNodeAt(size - 2); front.next = null; tail = front; } public void removeAt(int idx) {//根据下标删除结点(元素) if (size != 0 && idx < size) { if (idx == 0) { removeFirst(); } else if (idx == (size - 1)) { removelast(); } else { Node front = getNodeAt(idx - 1); Node now = front.next; Node after = now.next; front.next = after; now = null; } size--; } } public String display() {//获取所有元素 StringBuilder sb = new StringBuilder(); sb.append(first.element).append(","); Node temp = first; while (temp.next != null) { temp = temp.next; sb.append(temp.element).append(","); } return sb.toString(); } @Override public String toString() { return "LinkList{" + "first=" + first + ", tail=" + tail + ", size=" + size + '}'; } }
10-24
211
07-21
183
10-06