国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

手寫雙向鏈表LinkedList的幾個常用功能

vslam / 3295人閱讀

摘要:實現(xiàn)的功能如下創(chuàng)建鏈表添加節(jié)點默認添加和指定位置添加訪問某一個節(jié)點刪除節(jié)點獲得鏈表的長度大小判斷鏈表是否為空自定義鏈表的打印格式清空鏈表注意要弄清楚節(jié)點的前赴和后繼,刪除時要注意賦值的順序定義鏈表中節(jié)點的類值前驅(qū)后繼定義雙向鏈表,實現(xiàn)功能如

實現(xiàn)的功能如下:
1)創(chuàng)建鏈表
2)添加節(jié)點(默認添加和指定位置添加)
3)訪問某一個節(jié)點
4)刪除節(jié)點
5)獲得鏈表的長度大小
6)判斷鏈表是否為空
7)自定義鏈表的打印格式
8)清空鏈表

*注意:要弄清楚節(jié)點的前赴 和 后繼,刪除時要注意賦值的順序!!!

定義 鏈表中 節(jié)點的類Node

public class Node {
    
    /**
     * 值
     * 
     */
    Object value;
    
    /**
     * 前驅(qū)
     */
    Node pre;
    
    /**
     * 后繼
     */
    Node next;
    
    public Node(){
        
    }
    
    public Node(Object value, Node pre, Node next) {
        this.value = value;
        this.pre = pre;
        this.next = next;
    }
}

定義雙向鏈表LinkList,實現(xiàn)功能如下:

/**
 * 雙向鏈表
 * 
 * @author min
 *
 */
public class LinkList {

    /**
     * 頭結(jié)點
     */
    private Node head;
    
    /**
     * 尾結(jié)點
     */
    private Node tail;
    
    private int size;
    
    public LinkList() {
        head = new Node();
        tail = new Node();
        
        head.next = tail;
        tail.pre = head;
        size = 0;
        
    }
    
    public int size() {
        return size;
    }
    
    public boolean isEmpty() {
        return size==0;
    }
    
    public void clear() {
        head.next = tail;
        tail.pre = head;
        size = 0;
    }
    
    /**
     * 在末尾添加新的數(shù)據(jù)
     * 
     * @param value 數(shù)據(jù)
     */
    public void add(Object value) {
        Node node = new Node(value,tail.pre,tail);
        tail.pre.next = node;
        tail.pre = node;
        size ++;
        }
    
    /**
     * 在特地位置創(chuàng)建新的節(jié)點
     * @param index
     * @param value
     */
    public void add(int index, Object value) {
        checkLinkList(index);
        
        if(index == size -1) {
            //插在最后一位
            add(value);
        }
        else{
            Node x = node(index-1);
            Node y = node(index);
            Node node = new Node(value, x, y);
            x.next = node;
            y.pre = node;
            size ++;
        }        
    }
    
    /**
     * 獲取特定位置的節(jié)點
     * @param index
     * @return 節(jié)點存儲的值
     */
    public Object get(int index) {
        //檢查是否在鏈表內(nèi)
        checkLinkList(index);
        //節(jié)點的值
        return node(index).value;
    }

    /**
     * 刪除特定的節(jié)點
     * @param index
     * @return 被刪除的節(jié)點
     */
    public Node remove(int index) {
        checkLinkList(index);
        Node x = node(index);
        x.pre.next = x.next;
        x.next.pre = x.pre;
        size --;
        return x;
    }
    

    /**
     * 檢查索引是否在鏈表內(nèi)
     * 
     * @param index
     */
    private void checkLinkList(int index) {
        if(index > size() ||index < 0)
            throw new ArrayIndexOutOfBoundsException(index);
    }

    /**
     * 遍歷鏈表查詢特定的節(jié)點
     * 
     * @param index 索引
     * @return 指定的節(jié)點
     */
    private Node node(int index) {
        //第1個節(jié)點
        Node firstNode = head;
        //最后1個節(jié)點
        Node lastNode = tail;
        
        //從頭開始遍歷
        if(index <=(size>>1) ) {
            Node indexNode = firstNode;
            for(int i = -1; i < index; i++)
                indexNode = indexNode.next;
            return indexNode;
        }
            
        //從尾遍歷
        else{            
            Node indexNode = lastNode;
            for(int i = size; i>index; i--) {
                indexNode = indexNode.pre;
            }
            return indexNode;
        }        
    }
    
    /**
     * 重寫鏈表輸出方式
     * 
     */
    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        String str = "";
        for(int i = 0; i

測試

只實現(xiàn)了一些常用功能,自己寫的和工具包中的類對比,會從中g(shù)et到很多。受益多多~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73486.html

相關(guān)文章

  • Java LinkedList源碼分析

    摘要:經(jīng)常和一起被提及。本文分析的具體實現(xiàn)。其中是雙端隊列接口,所以可以當作是棧隊列或者雙端隊隊列。注意最后一個方法,這個方法是在指定的位置插入元素。首先判斷位置是否越界,然后判斷是不是最后一個位置。 簡介 LinkedList是一個常用的集合類,用于順序存儲元素。LinkedList經(jīng)常和ArrayList一起被提及。大部分人應(yīng)該都知道ArrayList內(nèi)部采用數(shù)組保存元素,適合用于隨機訪...

    mylxsw 評論0 收藏0
  • Java集合問題大匯總

    摘要:集合中成員很豐富,常用的集合有,,等。實現(xiàn)接口的集合主要有。集合中不能包含重復(fù)的元素,每個元素必須是唯一的。而以作為實現(xiàn)的構(gòu)造函數(shù)的訪問權(quán)限是默認訪問權(quán)限,即包內(nèi)訪問權(quán)限。與接口不同,它是由一系列鍵值對組成的集合,提供了到的映射。 原文地址 Java集合 Java集合框架:是一種工具類,就像是一個容器可以存儲任意數(shù)量的具有共同屬性的對象。 Java集合中成員很豐富,常用的集合有Arra...

    894974231 評論0 收藏0
  • Java-Mysql你所需要的面試題集內(nèi)容

    摘要:注意排版不需要花花綠綠的,盡量使用語法。協(xié)議的長連接和短連接,實質(zhì)上是協(xié)議的長連接和短連接。長連接短連接究竟是什么三次握手和四次揮手面試常客為了準確無誤地把數(shù)據(jù)送達目標處,協(xié)議采用了三次握手策略。 一 簡歷該如何寫 1.1 為什么說簡歷很重要?1.2-這3點你必須知道1.3-兩大法則了解一1.4-項目經(jīng)歷怎么寫?1.5-專業(yè)技能該怎么寫?1.6-開源程序員簡歷模板分享1.7 其他的一些...

    OpenDigg 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<