双向链表增、删、改、按序号插入(java)

简介: 双向链表增、删、改、按序号插入(java)

节点

 
public class DoubleHeroNode {
    public int no;
    public String name;
    public String nickname;
    //后一个节点
    public DoubleHeroNode next;
    //前一个节点
    public DoubleHeroNode pre;
 
    public DoubleHeroNode(int hNo, String hName, String hNickname) {
        no = hNo;
        name = hName;
        nickname = hNickname;
    }
 
    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", nickname='" + nickname + '\'' +
 
                '}';
    }
}

双向链表

 
 
public class DoubleLinkedList {
    //初始化一个头结点,头结点作为一个标志位
    private DoubleHeroNode head = new DoubleHeroNode(0, "", "");
 
 
    public DoubleHeroNode getHead() {
        return head;
    }
 
    public void list() {
        if (head.next == null) {
            System.out.println("链表为空");
            return;
        }
        DoubleHeroNode temp = head.next;
        while (true) {
            //判断是否到链表的最后
            if (temp == null) {
                break;
            }
            System.out.println(temp);
            temp = temp.next;
        }
    }
 
    /**
     * 添加一个节点
     *
     * @param doubleHeroNode
     */
    public void add(DoubleHeroNode doubleHeroNode) {
        DoubleHeroNode temp = head;
        while (true) {
            if (temp.next == null) {
                temp.next = doubleHeroNode;
                doubleHeroNode.pre = temp;
                break;
            }
            temp = temp.next;
        }
    }
 
    //修改节点,编号不能修改
    public void update(DoubleHeroNode newDoubleHeroNode) {
        DoubleHeroNode tem = head.next;
        while (true) {
            if (tem == null) {
                break;
            }
            if (tem.no == newDoubleHeroNode.no) {
                tem.nickname = newDoubleHeroNode.nickname;
                tem.name = newDoubleHeroNode.name;
                break;
            }
            tem = tem.next;
        }
    }
 
    public void delete(int no) {
        if (head.next == null) {
            return;
        }
        DoubleHeroNode tem = head.next;
        while (true) {
            if (tem == null) {
                break;
            }
            if (tem.no == no) {
                tem.pre.next = tem.next;
                //tem不是最后一个节点
                if (tem.next != null) {
                    tem.next.pre = tem.pre;
                }
                break;
            }
            tem = tem.next;
        }
    }
 
    //按照排序添加
    public void addByOrder(DoubleHeroNode doubleHeroNode) {
        DoubleHeroNode temp = head.next;
        if (temp == null) {
            head.next = doubleHeroNode;
            doubleHeroNode.pre = head;
            return;
        }
        //是否找到
        boolean flag = false;
        int no = doubleHeroNode.no;
        while (true) {
            if (no < temp.no) {
                flag = true;
                break;
            }
            if (temp.next != null) {
                temp = temp.next;
            } else {
                break;
            }
        }
 
        if (flag) {
            //插入到中间
            doubleHeroNode.next = temp;
            doubleHeroNode.pre = temp.pre;
            temp.pre.next=doubleHeroNode;
            temp.pre = doubleHeroNode;
        } else {
            //插入到末尾
            temp.next = doubleHeroNode;
            doubleHeroNode.pre = temp;
        }
    }
}

测试

 
 
public class DoubleLinkedListDemo {
    public static void main(String[] args) {
        //DoubleLinkedList linkedList=new DoubleLinkedList();
        //linkedList.add(new DoubleHeroNode(1,"宋江",""));
        //linkedList.add(new DoubleHeroNode(2,"卢俊义",""));
        //linkedList.add(new DoubleHeroNode(3,"吴用",""));
        //linkedList.add(new DoubleHeroNode(4,"林冲",""));
        //linkedList.delete(2);
        //linkedList.list();
 
        DoubleLinkedList linkedList2=new DoubleLinkedList();
 
        linkedList2.addByOrder(new DoubleHeroNode(2,"卢俊义",""));
        linkedList2.addByOrder(new DoubleHeroNode(1,"宋江",""));
        linkedList2.addByOrder(new DoubleHeroNode(9,"吴用",""));
        linkedList2.addByOrder(new DoubleHeroNode(4,"林冲",""));
        linkedList2.addByOrder(new DoubleHeroNode(3,"吴用",""));
        linkedList2.list();
        //System.out.println();
        //linkedList2.reversePrint();
        //linkedList2.list();
        //linkedList2.reverse();
        //linkedList2.list();
 
    }
}
目录
相关文章
|
4天前
|
Java
环形数组链表(java)
环形数组链表(java)
6 0
|
1月前
|
存储 Java
Java数据结构:链表
Java数据结构:链表
31 2
|
1月前
|
数据采集 Java 数据处理
Java流与链表:探索java.util.stream与LinkedList的交汇点
本文探讨了Java中流(Streams)与链表(LinkedList)的结合使用,展示了如何通过流处理LinkedList以实现高效数据操作。示例代码包括LinkedList的基本操作、使用Stream进行过滤和映射,以及结合HttpClient和代理IP实现网络爬虫。代理IP有助于绕过反爬机制,提高爬取效率。通过结合这些技术,开发者能编写出更简洁、高效的代码。
Java流与链表:探索java.util.stream与LinkedList的交汇点
|
24天前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
11 2
|
24天前
|
算法 Java C语言
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
10 1
|
24天前
|
算法 安全 Java
【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)
16 1
|
4天前
|
算法 Java
Java数据结构与算法:双向链表
Java数据结构与算法:双向链表
|
4天前
|
Java
HashTab基于链表简单实现(java,不包含扩容)
HashTab基于链表简单实现(java,不包含扩容)
7 0
|
4天前
|
Java
单向环形链表-约瑟夫问题(java)
单向环形链表-约瑟夫问题(java)
7 0
|
4天前
|
Java
数组链表(java)
数组链表(java)
5 0