package genericlinklist; /* * @ suntong * * * */ class LinkList<T> { private Entry<T> head;//头结点 class Entry<T>{ private T data; public Entry<T> next; public Entry() { data = null; next = null; } public Entry(T val) { this.data = val; next = null; } } public LinkList(){ head = new Entry<T>(); } //头插 public void insertHead(T val) { Entry<T> entry = new Entry<T>(val); entry.next = head.next; head.next = entry; } //尾插 public void insertTail(T val) { Entry<T> entry = new Entry<T>(val); Entry<T> cur = head; while(cur.next != null) { cur = cur.next; } cur.next = entry; } //得到长度 储存数据节点的个数 public int getLength(){ Entry<T> cur = head.next; int len = 0; while(cur!=null) { len++; cur = cur.next; } return len; } //在指定位置插入节点 public void addPos(int pos, T val) { if(pos < 0 || pos > getLength()-1) { return; } if(pos == 0){ insertHead(val); } Entry<T> entry = new Entry<T>(val); Entry<T> cur = head; Entry<T> prev = head; int tmp = 0; while(tmp != pos) { prev = cur; cur = cur.next; tmp++; } prev.next = entry; entry.next = cur; } //逆置 public Entry<T> reverse() { Entry<T> newHead=null; Entry<T> cur = head; Entry<T> prev = null; while(cur!=null) { Entry<T> curNext = cur.next; if(curNext==null){ newHead=cur; } cur.next = prev; prev = cur; cur = curNext; } return newHead; } //根据索引查找节点 public Entry<T> findByIndex(int pos) { if(pos < 0 || pos > getLength()-1) { } int tmp = 0; Entry<T> current = head; while(tmp != pos) { current = current.next; tmp++; } return current; } //倒数第K个节点 public T lastK(int k) { if (k <= 0 || k > getLength()) { return null; } Entry<T> cur1 = head; Entry<T> cur2 = head; while(k - 1 > 0) { if (cur2.next != null) { cur2 = cur2.next; --k; }else { return null; } } while (cur2.next != null) { cur1 = cur1.next; cur2 = cur2.next; } return cur1.data; } //打印 public void show() { Entry<T> cur = head.next; while(cur != null){ //最后一个节点了 System.out.println(""+cur.data); cur = cur.next; } System.out.println(); } public void show2(Entry<T> entry) { Entry<T> cur = entry; while(cur.next!=null) { System.out.println("data:"+cur.data); cur = cur.next; } } @Override public String toString() { return "LinkList [head=" + head + ", getLength()=" + getLength() + ", reverse()=" + reverse() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]"; } } public class GenericLinkList { public static void main(String[] args) { LinkList<String> p1 = new LinkList<String>(); /*LinkList<Integer> p2 = new LinkList<Integer>(); p2.insertHead(19); p2.show();*/ p1.insertHead("test1"); p1.insertHead("test2"); p1.insertHead("test3"); p1.insertHead("test4"); p1.show(); p1.addPos(2, "test5"); p1.show(); System.out.println("-------"); String str = p1.lastK(2); System.out.println(str); System.out.println("======="); p1.show2(p1.reverse()); p1.show(); System.out.println("-------"); String str1 = p1.lastK(2); System.out.println(str1); System.out.println("======="); } }
单链表的泛型操作
猜你喜欢
转载自blog.csdn.net/qq_41974391/article/details/80533967
今日推荐
周排行