java实现链表的增删改查

实现的代码如下:

节点的定义:


public class HeroNode {
    public int no;
    public String name;
    public String nickname;
    public HeroNode next;

    public HeroNode(int no, String name, String nickname) {
        this.no = no;
        this.name = name;
        this.nickname = nickname;
    }

    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", nickname='" + nickname + '\'' +
                '}';
    }
}

增删改查方法的实现:

public class SingleLinkedList {

    // 头结点不存放数据
    private HeroNode head = new HeroNode(0,"","");
    //添加方法 -- 没有循序的添加
    public void add(HeroNode heroNode){
        // 构建一个辅助变量遍历temp
        HeroNode temp = head;

        // 需要遍历整个链表找到最后一个,当temp.next == null时候就是最后一个
        while(true){
            if(temp.next == null){// 是最后一个元素了
                break;// 跳出循环
            }
            temp = temp.next;
        }
        temp.next = heroNode;
    }

    // 添加一个元素,按照顺序来添加,如果已经存在那个顺序,则提示已存在不可添加
    public void addByOrder(HeroNode heroNode){
        HeroNode temp = head;
        while(true){
            // 判断是否为空,为空的话则直接加进去
            if(temp.next == null){
                temp.next = heroNode;
                break;
            }
            // 判断是否大于小于等于
            if(temp.next.no == heroNode.no){// 已存在
                System.out.println(heroNode.no+"牌号已经存在。。。");
                break;
            }
            if(temp.next.no > heroNode.no){// 大于了,应该向前退一位
                heroNode.next = temp.next;// temp的下一个节点加到heroNode的下一个
                temp.next = heroNode;// 将heroNode加到temp的下一个
                break;
            }
            // temp向后移动一位
            temp = temp.next;
        }
    }

    // 根据编号来修改
    public void update(HeroNode heroNode){
        HeroNode temp = head;
        while(true){
            if(temp.next == null){
                heroNode.next = temp.next;
                temp.next = heroNode;
                System.out.println("该节点不存在,已添加");
                break;
            }
            if(temp.next.no == heroNode.no){
                temp.next.name = heroNode.name;
                temp.next.nickname = heroNode.nickname;
                System.out.println("已修改。。。");
                break;
            }
            temp = temp.next;
        }
    }

    //删除一个节点
    public void delete(int no){
        HeroNode temp = head;
        if(temp.next == null){
            System.out.println("链表为空。。");
        }
        while(true){
            if(temp.next.no == no){
                temp.next = temp.next.next;
                System.out.println("删除成功。。");
                break;
            }
            temp = temp.next;
        }
    }


    //遍历显示所有的元素
    public void showLinked(){
        // 判断是否为空
        if(head.next == null){
            System.out.println("链表为空。。");
            return;// 为空直接结束
        }
        HeroNode temp = head.next;
        while(true){
            if(temp == null){// 为空,为最后一位
                break;
            }
            System.out.println(temp);// 打印节点
            temp = temp.next;// 向后移一位
        }
    }

}

测试类的书写:

public class TestLinkedList {

    public static void main(String[] args) {
        HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨");
        HeroNode heroNode2 = new HeroNode(2, "林冲", "豹子头");
        HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星");
        HeroNode heroNode4 = new HeroNode(4, "李逵", "黑旋风");

        // 创建一个单链表

        SingleLinkedList single = new SingleLinkedList();
        single.addByOrder(heroNode1);
        single.addByOrder(heroNode4);
        single.addByOrder(heroNode2);
        single.addByOrder(heroNode3);
        HeroNode heroNode5 = new HeroNode(5, "李逵55", "黑旋风55");
        single.update(heroNode5);
        single.showLinked();

        System.out.println("删除之后。。。");
        single.delete(5);
        single.showLinked();
    }

}

 

你可能感兴趣的:(数据结构)