package com.test; public class SingleLinkedList<T> { /** * 链表长度 */ public int size; /** * 头结点 */ public Node<T> head = new Node<T>(); /** * 尾结点 */ public Node<T> rear = head; /** * 结点类 * @param <T> */ private class Node<T>{ /** * 结点数据 */ T data; /** * 下个节点 */ Node<T> next; public Node(T data){ this.data=data; this.next = null; } public Node(){} @Override public String toString() { return "Node{" + "data=" + data + ", next=" + next + '}'; } } /** *尾添加 * @param data */ public void addRear(T data){ Node newNode = new Node(data); this.rear.next = newNode; this.rear = newNode; size ++; } /** * 头添加 * @param data */ public void addHead(T data){ Node newNode = new Node(data); newNode.next = this.head.next; this.head.next = newNode; if(size==0){ this.rear = newNode; } size ++; } /** * 插入 * @param data * @param index */ public void insert(T data, int index){ if(index>this.size){ throw new RuntimeException("OUT OF INDEX"); } Node node = this.head; for(int i=0;i<index;i++){ node = node.next ; } Node newData = new Node(data); newData.next = node.next; node.next = newData; if(index==0){ this.head = newData; } if(index==size){ this.rear = newData; } this.size++; } /** * 删除 * @param index */ public void delete(int index){ if(index>=this.size||index<0){ throw new RuntimeException("OUT OF INDEX"); } Node node = this.head; for(int i=0;i<index;i++){ node = node.next ; } if(null!=node.next){ node.next=node.next.next; }else { node.next = null; } size--; if(index==size){ this.rear = node; } } /** * 修改 * @param data * @param index */ public void update(T data,int index){ if(index>=this.size||index<0){ throw new RuntimeException("OUT OF INDEX"); } Node newNode = new Node(data); Node node = this.head; for(int i=0;i<index;i++){ node = node.next ; } if(null!=node.next){ newNode.next = node.next.next; } node.next=newNode; if(index+1==size){ this.rear = newNode; } } /** * 遍历 */ public void showList() { Node node = head.next; for (int i = 0; i < size; i++) { System.out.println(node.data); node = node.next; } } /** * 索引 * @param index * @return */ public T getData(int index){ if(index>=this.size||index<0){ throw new RuntimeException("OUT OF INDEX"); } Node<T> node = this.head; for(int i=0;i<index+1;i++){ node = node.next ; } return (T) node; } /** * 翻转 */ public void reverse(){ SingleLinkedList tmpList = new SingleLinkedList(); Node node = head.next; while (node!=null){ tmpList.addHead(node.data); node = node.next; } this.head = tmpList.head; } public static void main(String[] args) { SingleLinkedList singleLinkedList = new SingleLinkedList(); singleLinkedList.addHead("head1"); singleLinkedList.addHead("head2"); singleLinkedList.addRear("rear1"); singleLinkedList.addRear("rear2"); singleLinkedList.insert("insert",4); singleLinkedList.delete(0); singleLinkedList.update("update",0); System.out.println(singleLinkedList); singleLinkedList.showList(); System.out.println(singleLinkedList.getData(3)); singleLinkedList.reverse(); singleLinkedList.showList(); } @Override public String toString() { return "SingleLinkedList{" + "size=" + size + ", head=" + head + ", rear=" + rear + '}'; } }
JAVA 单向链表
最新推荐文章于 2024-09-05 10:39:00 发布