簡介
linkedList應該是一種很是很是簡單的數據結構了。節點一個一個的鏈接起來,就成了linkedList。今天咱們使用動畫的方法一塊兒來看看linkedList是怎麼插入和刪除的。java
linkedList的構建
linkedList是由一個一個的節點構成的。而每一個節點只須要存儲要保存的數據和下一個節點的引用便可。數據結構
linkedList自己須要一個head節點,因此咱們的linkedList能夠這樣構建:app
public class LinkedList { Node head; // head 節點 //Node表示的是Linked list中的節點,包含一個data數據和下一個節點的引用 class Node { int data; Node next; //Node的構造函數 Node(int d) { data = d; } } }
linkedList的操做
先看一下linkedList怎麼插入數據,插入數據有三種方式,頭部插入,尾部插入,中間插入。函數
頭部插入動畫
先看一個頭部插入的例子:阿里雲
![](http://static.javashuo.com/static/loading.gif)
頭部插入的邏輯是什麼呢?spa
新插入的節點做爲head節點,而後將原來的head節點指向當前head節點的next引用便可。3d
//插入到linkedList的頭部 public void push(int newData) { //構建要插入的節點 Node newNode = new Node(newData); //新節點的next指向如今的head節點 newNode.next = head; //現有的head節點指向新的節點 head = newNode; }
尾部插入code
再看一下尾部插入的例子:blog
![](http://static.javashuo.com/static/loading.gif)
插入的邏輯是什麼呢?
找到最後一個節點,而後將最後一個節點的next指向新插入的節點。
//新節點插入到list最後面 public void append(int newData) { //建立新節點 Node newNode = new Node(newData); //若是list是空,則新節點做爲head節點 if (head == null) { head = newNode; return; } newNode.next = null; //找到最後一個節點 Node last = head; while (last.next != null) { last = last.next; } //插入 last.next = newNode; return; }
中間插入
再看一下中間插入的例子:
![](http://static.javashuo.com/static/loading.gif)
這個例子中,咱們在第三個節點的位置插入了一個93。
插入邏輯就是先找到第二個節點,將第二個節點的next指向新節點,而後將新節點的next指向原先的第三個節點。
看下java代碼如何實現:
//插入在第幾個元素以後 public void insertAfter(int index, int newData) { Node prevNode = head; for (int i = 1; i < index; i++) { if (prevNode == null) { System.out.println("輸入的index有誤,請從新輸入"); return; } prevNode = prevNode.next; } //建立新的節點 Node newNode = new Node(newData); //新節點的next指向prevNode的下一個節點 newNode.next = prevNode.next; //將新節點插入在prevNode以後 prevNode.next = newNode; }
刪除節點
再看一下怎麼刪除某個位置的節點:
![](http://static.javashuo.com/static/loading.gif)
上面的例子中,咱們要刪除第5個節點。
刪除的邏輯就是找到第4個節點和第6個節點。而後將第四個節點的next指向第6個節點便可。
看下相應的java代碼以下:
//刪除特定位置的節點 void deleteNode(int index) { // 若是是空的,直接返回 if (head == null) return; // head節點 Node temp = head; // 若是是刪除head節點 if (index == 1) { head = temp.next; return; } // 找到要刪除節點的前一個節點 for (int i=1; temp!=null && i<index-1; i++) temp = temp.next; // 若是超出範圍 if (temp == null || temp.next == null) return; // temp->next 是要刪除的節點,刪除節點 Node next = temp.next.next; temp.next = next; }
本文爲阿里雲原創內容,未經容許不得轉載。