博客
关于我
Java实现无头双向链表
阅读量:528 次
发布时间:2019-03-08

本文共 8439 字,大约阅读时间需要 28 分钟。

Java???????????

1. ???????

class ListNode {    public int data;    public ListNode next; // ????    public ListNode prev; // ????    public ListNode(int data) {        this.data = data;    }}

2. ????????

public class DoubleLinkedList {    public ListNode head; // ???    public ListNode tail; // ???}

3. ?????

// ???public void addFirst(int data) {    ListNode node = new ListNode(data);    if (this.head == null) {        this.head = node;        this.tail = node;    } else {        node.next = this.head;        this.head.prev = node;        this.head = node;    }}

4. ?????

// ???public void addLast(int data) {    ListNode node = new ListNode(data);    if (this.head == null) {        this.tail = node;        this.head = node;    } else {        this.tail.next = node;        node.prev = this.tail;        this.tail = node;    }}

5. ??????

// ????public void display() {    ListNode cur = this.head;    while (cur != null) {        System.out.print(cur.data + " ");        cur = cur.next;    }    System.out.println();}

6. ????????

// ???????????????0???public void addIndex(int index, int data) {    if (index < 0 || index > size()) {        return;    }    if (index == 0) {        addFirst(data);        return;    }    if (index == size()) {        addLast(data);        return;    }    ListNode cur = searchIndex(index);    ListNode node = new ListNode(data);    node.next = cur;    node.prev = cur.prev;    cur.prev.next = node;    cur.prev = node;}public ListNode searchIndex(int index) {    ListNode cur = this.head;    while (index > 0) {        cur = cur.next;        index--;    }    return cur;}// ?????public int size() {    ListNode cur = this.head;    int count = 0;    while (cur != null) {        cur = cur.next;        count++;    }    return count;}

7. ??????????????

// ???????????key??public void remove(int key) {    ListNode cur = this.head;    while (cur != null) {        if (cur.data == key) {            // ?????????            if (cur == this.head) {                this.head = this.head.next;                this.head.prev = null;            } else {                cur.prev.next = cur.next;                if (cur.next != null) {                    // ????????                    cur.next.prev = cur.prev;                } else {                    this.tail = cur.prev;                }            }            // ????            return;        } else {            cur = cur.next;        }    }}

8. ??????????

public void removeAllkey(int key) {    ListNode cur = this.head;    while (cur != null) {        if (cur.data == key) {            // ?????????            if (cur == this.head) {                this.head = this.head.next;                this.head.prev = null;            } else {                cur.prev.next = cur.next;                if (cur.next != null) {                    // ????????                    cur.next.prev = cur.prev;                } else {                    this.tail = cur.prev;                }            }        }        cur = cur.next;    }}

9. ????

// ??????public void clear() {    ListNode cur = this.head;    ListNode curNext;    while (cur != null) {        curNext = cur.next;        cur.next = null;        cur.prev = null;        cur = curNext;    }    this.head = null;    this.tail = null;}

10. ??????????

// ?????????keypublic boolean contains(int key) {    if (head == null) {        return false;    }    ListNode cur = this.head;    while (cur != null) {        if (cur.data == key) {            return true;        }        cur = cur.next;    }    return false;}

11. ????

public class Test {    public static void main(String[] args) {        DoubleLinkedList doubleLinkedList = new DoubleLinkedList();        doubleLinkedList.addFirst(3);        doubleLinkedList.addFirst(3);        doubleLinkedList.addFirst(3);        doubleLinkedList.addLast(4);        doubleLinkedList.addLast(5);        doubleLinkedList.addLast(3);        // 3 2 1 4 5 6        doubleLinkedList.display();        doubleLinkedList.addIndex(3, 999);        // 3 2 1 999 4 5 6        doubleLinkedList.display();        doubleLinkedList.remove(5);        doubleLinkedList.display();        System.out.println(doubleLinkedList.contains(9));        doubleLinkedList.removeAllkey(3);        doubleLinkedList.display();        doubleLinkedList.clear();        System.out.println("dadedsffw");    }}

12. ????

import java.util.List;/**  * @Author ??  * @Date 2020/7/31  * @Time 10:54  */class ListNode {    public int data;    public ListNode next; // ????    public ListNode prev; // ????    public ListNode(int data) {        this.data = data;    }}public class DoubleLinkedList {    public ListNode head; // ???    public ListNode tail; // ???    // ???    public void addFirst(int data) {        ListNode node = new ListNode(data);        if (this.head == null) {            this.head = node;            this.tail = node;        } else {            node.next = this.head;            this.head.prev = node;            this.head = node;        }    }    // ???    public void addLast(int data) {        ListNode node = new ListNode(data);        if (this.head == null) {            this.tail = node;            this.head = node;        } else {            this.tail.next = node;            node.prev = this.tail;            this.tail = node;        }    }    // ????    public void display() {        ListNode cur = this.head;        while (cur != null) {            System.out.print(cur.data + " ");            cur = cur.next;        }        System.out.println();    }    // ???????????????0???    public void addIndex(int index, int data) {        if (index < 0 || index > size()) {            return;        }        if (index == 0) {            addFirst(data);            return;        }        if (index == size()) {            addLast(data);            return;        }        ListNode cur = searchIndex(index);        ListNode node = new ListNode(data);        node.next = cur;        node.prev = cur.prev;        cur.prev.next = node;        cur.prev = node;    }    public ListNode searchIndex(int index) {        ListNode cur = this.head;        while (index > 0) {            cur = cur.next;            index--;        }        return cur;    }    // ?????    public int size() {        ListNode cur = this.head;        int count = 0;        while (cur != null) {            cur = cur.next;            count++;        }        return count;    }    // ???????????key??    public void remove(int key) {        ListNode cur = this.head;        while (cur != null) {            if (cur.data == key) {                // ?????????                if (cur == this.head) {                    this.head = this.head.next;                    this.head.prev = null;                } else {                    cur.prev.next = cur.next;                    if (cur.next != null) {                        // ????????                        cur.next.prev = cur.prev;                    } else {                        this.tail = cur.prev;                    }                }                // ????                return;            } else {                cur = cur.next;            }        }    }    // ????key??    public void removeAllkey(int key) {        ListNode cur = this.head;        while (cur != null) {            if (cur.data == key) {                // ?????????                if (cur == this.head) {                    this.head = this.head.next;                    this.head.prev = null;                } else {                    cur.prev.next = cur.next;                    if (cur.next != null) {                        // ????????                        cur.next.prev = cur.prev;                    } else {                        this.tail = cur.prev;                    }                }            }            cur = cur.next;        }    }    // ??????    public void clear() {        ListNode cur = this.head;        ListNode curNext;        while (cur != null) {            curNext = cur.next;            cur.next = null;            cur.prev = null;            cur = curNext;        }        this.head = null;        this.tail = null;    }    // ?????????key    public boolean contains(int key) {        if (head == null) {            return false;        }        ListNode cur = this.head;        while (cur != null) {            if (cur.data == key) {                return true;            }            cur = cur.next;        }        return false;    }}

转载地址:http://coanz.baihongyu.com/

你可能感兴趣的文章
Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
查看>>
Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
查看>>
Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
查看>>
Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
查看>>
Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
查看>>
Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
查看>>
Openlayers高级交互(2/20):清除所有图层的有效方法
查看>>
Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
查看>>
Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
查看>>
Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
查看>>
Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
查看>>
Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
查看>>
Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
查看>>
Openlayers高级交互(8/20):选取feature,平移feature
查看>>
Openlayers高级交互(9/20):编辑图形(放缩、平移、变形、旋转),停止编辑
查看>>
Openlayers:DMS-DD坐标形式互相转换
查看>>
openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
查看>>
OpenLDAP(2.4.3x)服务器搭建及配置说明
查看>>
OpenLDAP编译安装及配置
查看>>
Openmax IL (二)Android多媒体编解码Component
查看>>