package 數(shù)據(jù)結(jié)構(gòu)算法.鏈表; /* *定義節(jié)點(diǎn) * 鏈表由節(jié)點(diǎn)構(gòu)成 */ public class Node{ private E e; //數(shù)據(jù)data private Node next; //指向下一個(gè)節(jié)點(diǎn) public Node() { } public Node(E e) { this.e = e; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public E getE() { return e; } public void setE(E e) { this.e = e; } }
package 數(shù)據(jù)結(jié)構(gòu)算法.鏈表; /* * 定義實(shí)現(xiàn)類MyLinkedList * 實(shí)現(xiàn)鏈表的基本功能:增刪改查 */ public class MyLinkedList{ //聲明頭節(jié)點(diǎn)尾節(jié)點(diǎn) private Node head; private Node last; //鏈表的大小 private int size; private int modcount; //計(jì)算被修改的次數(shù) public MyLinkedList() { head = new Node ();//實(shí)例化頭結(jié)點(diǎn) last = head; } /* *返回單鏈表中存儲(chǔ)的元素總數(shù) */ public int size() { return size; } /* *獲取指定索引位置的節(jié)點(diǎn)對(duì)象 */ public Node get(int index) { if (index < 0 || index > size - 1) return null; Node node = head.getNext();//將頭結(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)賦給Node for (int i = 0; i < index; i++) { node = node.getNext();//獲取node的下一個(gè)節(jié)點(diǎn) } return node; } /* *獲取指定索引位置的數(shù)據(jù) */ public E getValue(int index) { if (index < 0 || index > size - 1) return null; Node node = get(index); return node.getE(); } /* *增加元素 */ public void add(E e) { Node node = new Node (e); //以e實(shí)例化一個(gè)節(jié)點(diǎn) last.setNext(node);//往尾節(jié)點(diǎn)后追加節(jié)點(diǎn) last = node;//該節(jié)點(diǎn)設(shè)為最后一個(gè)節(jié)點(diǎn) size++; modcount++; } /* *指定位置插入元素,返回插入的節(jié)點(diǎn)數(shù)據(jù) */ public E add(int index, E e) { if (index < 0 || index > size - 1) return null; Node node = new Node (e); //實(shí)例化一個(gè)節(jié)點(diǎn) //找到插入的原節(jié)點(diǎn) Node oldNode = get(index); if (index == 0) {//當(dāng)索引為0時(shí) head.setNext(node); } else { //找到插入節(jié)點(diǎn)的上一個(gè) Node bNode = get(index - 1); bNode.setNext(node); } node.setNext(oldNode); size++; modcount++; return oldNode.getE(); } /* *刪除指定的節(jié)點(diǎn)e,并返回刪除節(jié)點(diǎn)的數(shù)據(jù) */ public E delete(int index) { if (index < 0 || index > size - 1) return null; if (index == 0) {//當(dāng)索引為1,令頭結(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)為頭結(jié)點(diǎn) Node node = head.getNext(); head.setNext(node.getNext()); } //獲取要?jiǎng)h除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn) Node bNode = get(index - 1); //獲取要?jiǎng)h除的節(jié)點(diǎn) Node Node = bNode.getNext(); //獲取要?jiǎng)h除節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn) Node nNode = Node.getNext(); //刪除該節(jié)點(diǎn) bNode.setNext(nNode); //清除Node的下一個(gè)節(jié)點(diǎn) Node.setNext(null); size--; modcount++; return Node.getE();//返回節(jié)點(diǎn)中的數(shù)據(jù)域 } /* *修改指定位置的數(shù)據(jù)域并返回修改后的數(shù)據(jù) */ public E set(int index, E e) { if (index < 0 || index > size - 1) return null; //獲取指定位置的原節(jié)點(diǎn) Node node = get(index); node.setE(e); modcount++; return node.getE(); } }
package 數(shù)據(jù)結(jié)構(gòu)算法.鏈表; /* *定義測(cè)試類 */ public class MyLinkedListTest { public static void main(String[] args) { MyLinkedListlist = new MyLinkedList<>(); //測(cè)試add list.add("one"); list.add("two"); list.add("three"); list.add("four"); list.add(0,"newone"); list.add(1,"newtwo"); for (int i = 0; i < list.size(); i++) { System.out.print(list.getValue(i)+" "); } //測(cè)試set System.out.println(); list.set(0, "111"); list.set(1, "222"); System.out.println(list.getValue(0) + " " + list.getValue(1)); //測(cè)試delete System.out.println(); list.delete(1); for (int i = 0; i < list.size(); i++) { System.out.print(list.getValue(i)+" "); } } }
運(yùn)行結(jié)果如下:
創(chuàng)新互聯(lián)公司是一家專業(yè)提供華州企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為華州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
以上就是全部知識(shí)點(diǎn)內(nèi)容,感謝大家對(duì)創(chuàng)新互聯(lián)的支持。