数据结构 单向链表的相关操作

class GoodsNode

public class GoodsNode {
    public int id;
    public String name;
    public double price;
    public GoodsNode next;

    public GoodsNode() {
    }

    public GoodsNode(int id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return "GoodsNode{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

class DLLinkedList

public class DLLinkedList {
    //创建头部结点
    private GoodsNode node = new GoodsNode();
    //往链表中添加一个节点
    public void add(GoodsNode goodsNode){
        GoodsNode temp =node;
        while (true){
            //直到找到链表的末尾
            if(temp.next==null){
                //temp.next=goodsNode;
                break;
            }
            temp=temp.next;
        }
        temp.next=goodsNode;
    }
    /*
    * 按照商品编号id值进行添加
    */
     public void addOrder(GoodsNode goodsNode){
         //获取头结点
         GoodsNode temp= node;
         boolean flg = false;
         while(true){
             if(temp.next==null){
                 break;
             }
             if(temp.next.id>goodsNode.id){
                 break;
             }else if (temp.next.id==goodsNode.id){
                 flg=true;
                 break;
             }
             temp=temp.next;
         }
         if(flg){
             throw new RuntimeException("已经存了该商品不能重复添加");
         }else {
             goodsNode.next=temp.next;
             temp.next=goodsNode;
         }
     }
     /*
     * 修改链表中的节点
     * */
    public void updateNode(GoodsNode goodsNode){
        if(node.next==null){
            throw new RuntimeException("链表为空");
        }
        GoodsNode temp= node.next;
        boolean flg = false;//用来标识找到了这个节点
        while(true){
            if(temp==null){
                break;
            }
            if(temp.id==goodsNode.id){
                flg=true;
                break;
            }
            temp=temp.next;
        }
        if(flg){
            //真正的修改节点
            temp.name=goodsNode.name;
            temp.price=goodsNode.price;
        }else {
            throw new RuntimeException("在整个链表中未找到目标节点。。。");
        }
    }
    /**
     * 节点的删除
     */
    public void delNode(int id){
        GoodsNode temp= node;
        boolean flg=false;
        while (true){
            if(temp.next==null){
                break;
            }
            if(temp.next.id==id){
                flg=true;
                break;
            }
            temp=temp.next;
        }
        if(flg){
            temp.next=temp.next.next;
        }else {
            throw new RuntimeException("未找到要删除的目标节点");
        }
    }
    /**
     * 查看链表中的每一个元素
     */
    public void list(){
        if(node.next==null){
            throw new RuntimeException("链表中没有元素");
        }
        GoodsNode temp =node.next;
        while (true){
            if(temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.next;
        }
    }
    /**
     * 面试题
     * 统计链表中存在的节点个数
     * 头结点不计算在内
     */
    public int getLength(){
        int count=0;
        if(node.next==null){
            return count;
        }
        GoodsNode temp=node.next;
        while(true){
            if(temp==null){
                return count;
            }else {
                temp=temp.next;
                count++;
            }
        }
    }
}

class LinkedTest

public class LinkedTest {
    public static void main(String[] args) {
        DLLinkedList dlLinkedList = new DLLinkedList();
        GoodsNode goodsNode1= new GoodsNode(1,"耐克运动鞋1",199.00);
        GoodsNode goodsNode2= new GoodsNode(2,"耐克运动鞋2",299.00);
        GoodsNode goodsNode3= new GoodsNode(3,"耐克运动鞋3",399.00);
        GoodsNode goodsNode4= new GoodsNode(4,"耐克运动鞋4",499.00);
        GoodsNode goodsNode5= new GoodsNode(5,"耐克运动鞋5",599.00);
/*        dlLinkedList.add(goodsNode1);
        dlLinkedList.add(goodsNode2);
        dlLinkedList.add(goodsNode3);
        dlLinkedList.add(goodsNode4);
        dlLinkedList.add(goodsNode5);*/
        dlLinkedList.addOrder(goodsNode1);
        dlLinkedList.addOrder(goodsNode3);
        dlLinkedList.addOrder(goodsNode2);
        dlLinkedList.addOrder(goodsNode5);
        dlLinkedList.addOrder(goodsNode4);
/*        dlLinkedList.updateNode(new GoodsNode(2,"耐克上衣",288));
        dlLinkedList.delNode(3);*/
//        dlLinkedList.getLength();
        System.out.println(dlLinkedList.getLength());
        dlLinkedList.list();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值