新聞中心
如何對java鏈表進行增、刪、查、改操作?針對這個問題,今天小編總結(jié)了這篇文章,希望能幫助更多想解決這個問題的朋友找到更加簡單易行的辦法。
成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、黃驊網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、成都商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為黃驊等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
鏈表也是一個線性的數(shù)據(jù)結(jié)構(gòu),與數(shù)組不同的是,鏈表在內(nèi)存中的存儲方式是隨機存儲。
下面給出涵蓋鏈表四個操作的一個完整的例子,有幾點需要注意的是:
(一)在增刪改查之前,都需要對給出的下標(biāo)進行邊界判斷;
(二)增加一個名為last的節(jié)點,可以方便在鏈表的尾部進行操作,省去了查找到最后一個節(jié)點的時間復(fù)雜度;
(三)在鏈表的內(nèi)部插入元素時,我們先找到要插入位置的前一個節(jié)點prevNode,然后可以記錄下prevNode的next,插入時先將prevNode的next指向要插入的節(jié)點,再將要插入的節(jié)點的next指向當(dāng)前的next。這一點和C++中的操作也略有不同;
(四)刪除節(jié)點時,用removedNode來記錄刪除節(jié)點的返回值,并且不要忘了size要減1。
操作示例如下:
public class MyLinkedList { //定義一個靜態(tài)的內(nèi)部類 private static class Node{ int data; Node next; Node(int data){ this.data = data; } } private Node head; private Node last;//為了方便尾部插入元素的操作 private int size;//size表示鏈表的實際長度 public void insert(int data, int index)throws Exception{ if(index < 0 || index > size) throw new IndexOutOfBoundsException("超出鏈表節(jié)點范圍!"); Node insertedNode = new Node(data); if(size == 0){//插入第一個元素時元素個數(shù)為0 head = insertedNode; last = insertedNode; }else if(size == index){//在鏈表的末尾插入 last.next = insertedNode; last = insertedNode; }else{ Node prevNode = get(index - 1); Node nextNode = prevNode.next; prevNode.next = insertedNode; insertedNode.next = nextNode; } size++; } public void update(int data, int index) throws Exception{ if(index < 0 || index >= size) throw new IndexOutOfBoundsException("超出鏈表節(jié)點范圍!"); if(index == 0) head.data = data; else if(index == size - 1) last.data = data; else{ Node temp = get(index); temp.data = data; } } public Node remove(int index) throws Exception { if(index < 0 || index >= size){ throw new IndexOutOfBoundsException("超出鏈表節(jié)點范圍!"); } Node removedNode = null;//不給removedNode分配堆內(nèi)存 if(index == 0){ removedNode = head; head = head.next; } else if(index == size - 1){ //刪除尾結(jié)點 Node prevNode = get(index - 1); removedNode = prevNode.next; prevNode.next = null; last = prevNode; } else{ Node prevNode = get(index - 1); Node nextNode = prevNode.next.next; removedNode = prevNode.next; prevNode.next = nextNode; } size--; return removedNode; } //查找鏈表元素 public Node get(int index) throws Exception{ if(index < 0 || index >= size){ throw new IndexOutOfBoundsException("超出鏈表節(jié)點范圍!"); } Node temp = head; for(int i = 0; i < index; i++){ temp = temp.next; } // size--; return temp; } //輸出鏈表 public void output(){ Node temp = head; while(temp != null){ System.out.println(temp.data); temp = temp.next; } } public static void main(String[] args) throws Exception{ MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.insert(3,0); myLinkedList.insert(7,1); myLinkedList.insert(9,2); myLinkedList.insert(5,3); myLinkedList.insert(6,1); myLinkedList.remove(0); myLinkedList.update(2,1); myLinkedList.output(); System.out.println(myLinkedList.size); } }
關(guān)于對java鏈表進行增、刪、查、改操作的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網(wǎng)站欄目:如何對java鏈表進行增、刪、查、改操作
文章出自:http://www.dlmjj.cn/article/goggdg.html