看動畫學算法之:linkedList

簡介

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怎麼插入數據,插入數據有三種方式,頭部插入,尾部插入,中間插入。函數

頭部插入動畫

先看一個頭部插入的例子:阿里雲

頭部插入的邏輯是什麼呢?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

插入的邏輯是什麼呢?

找到最後一個節點,而後將最後一個節點的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;
    }

中間插入

再看一下中間插入的例子:

這個例子中,咱們在第三個節點的位置插入了一個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;
    }

刪除節點

再看一下怎麼刪除某個位置的節點:

上面的例子中,咱們要刪除第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;
    }

 

原文連接

本文爲阿里雲原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索