成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

手寫(xiě)雙向鏈表LinkedList的幾個(gè)常用功能

vslam / 3324人閱讀

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

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

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

定義 鏈表中 節(jié)點(diǎn)的類(lèi)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,實(shí)現(xiàn)功能如下:

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

    /**
     * 頭結(jié)點(diǎn)
     */
    private Node head;
    
    /**
     * 尾結(jié)點(diǎn)
     */
    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é)點(diǎn)
     * @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é)點(diǎn)
     * @param index
     * @return 節(jié)點(diǎn)存儲(chǔ)的值
     */
    public Object get(int index) {
        //檢查是否在鏈表內(nèi)
        checkLinkList(index);
        //節(jié)點(diǎn)的值
        return node(index).value;
    }

    /**
     * 刪除特定的節(jié)點(diǎn)
     * @param index
     * @return 被刪除的節(jié)點(diǎn)
     */
    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);
    }

    /**
     * 遍歷鏈表查詢(xún)特定的節(jié)點(diǎn)
     * 
     * @param index 索引
     * @return 指定的節(jié)點(diǎn)
     */
    private Node node(int index) {
        //第1個(gè)節(jié)點(diǎn)
        Node firstNode = head;
        //最后1個(gè)節(jié)點(diǎn)
        Node lastNode = tail;
        
        //從頭開(kāi)始遍歷
        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;
        }        
    }
    
    /**
     * 重寫(xiě)鏈表輸出方式
     * 
     */
    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        String str = "";
        for(int i = 0; i

測(cè)試

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73486.html

相關(guān)文章

  • Java LinkedList源碼分析

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

    mylxsw 評(píng)論0 收藏0
  • Java集合問(wèn)題大匯總

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

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

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

    OpenDigg 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<