数据结构--java实现单链表与双链表

单链表

package use1;

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

    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 +
                '}';
    }
    //计算单链表中节点的个数
    public int getLength(){
        if(node.next==null){
            return 0;
        }
        GoodsNode temp=node.next;
        int length=0;
        while (temp!=null){
            length++;
            temp=temp.next;
        }
        return length;
    }
}
package use1;

public class DLLinkedlist {
    private GoodsNode node =new GoodsNode(0,"",0.0);

    //向链表中添加节点
    public void add(GoodsNode goodsNode){
        GoodsNode temp=node;
        while (true){
            if(temp.next==null){
                break;
            }
            temp=temp.next;
        }
        temp.next=goodsNode;
    }

    //按照商品id值进行添加,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){
            System.out.println("重复插入");
        }else{
            goodsNode.next=temp.next;
            temp.next=goodsNode;
        }
    }
    //修改结点
    public void updateNode(GoodsNode goodsNode){
        //如果链表为空
           if(node.next==null){
               System.out.println("链表为空");
           }
           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{
               System.out.println("未找到目标节点");
           }
    }

    //删除节点,根据节点编号进行删除
    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{
                System.out.println("未找到所要删除的节点");
            }
    }
    //查看链表中节点元素
    public void list(){
      if(node.next==null){
          System.out.println("为空");
      }
      GoodsNode temp=node.next;
      while (true){
          if(temp==null){
              break;
          }
          System.out.println(temp);
          temp=temp.next;
      }
    }




}
package use1;

public class LinkedTest {
    public static void main(String[] args){

        DLLinkedlist linkedlist =new DLLinkedlist();
        DLLinkedlist linkedlist1 =new DLLinkedlist();

        GoodsNode goodsNode1=new GoodsNode(1,"小可学妹",1999.99);
        GoodsNode goodsNode2=new GoodsNode(2,"小猪学妹",2999.99);
        GoodsNode goodsNode3=new GoodsNode(3,"小狗学妹",3999.99);
        GoodsNode goodsNode4=new GoodsNode(4,"小猫学妹",4999.99);

        linkedlist.add(goodsNode1);
        linkedlist.add(goodsNode2);
        linkedlist.add(goodsNode3);
        linkedlist.add(goodsNode4);

        linkedlist1.addOrder(goodsNode4);
        linkedlist1.addOrder(goodsNode3);
        linkedlist1.addOrder(goodsNode1);
        linkedlist1.addOrder(goodsNode2);
System.out.println(linkedlist.getLength());

        linkedlist.list();
        //linkedlist1.list();

        linkedlist.updateNode(new GoodsNode( 2,"小狼学妹",66.00));
        linkedlist.list();
        linkedlist.delNode(3);
        linkedlist.list();
    }

}

双向链表

package use1;

public class BookNode {

    public int id;

    public String name;

    public double price;


    //节点下一个节点  直接后继
    public BookNode next;

    //上一个节点   直接前驱
    public BookNode pre;

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

import java.awt.print.Book;

public class DualLinkedList {

    private BookNode head = new BookNode(0,"",0.0);


    /**
     * 添加结尾新的节点
     * @param newNode
     */
    public void addLast(BookNode newNode){
        BookNode temp = head;

        while (true){

            //如果第一次进来则进入,表示双向链表是空数据
            if (temp.next == null){
                break;
            }

            temp = temp.next;
        }
        /**
         * 需要把新的节点给上一个节点
         * 需要把上一个节点next指向新的节点
         */
        temp.next = newNode;
        newNode.pre = temp;


    }

    /**
     * 修改节点
     * 条件:双向链表中的每一个结点的id和修改的id对比,如果对比成功,则进行修改该结点
     * ,如果没有对比成功,双向链表中未找到目标结点
     */
    public void updateNode(BookNode node){
        //是否是空链表
        if (head.next == null){
            System.out.println("空链表...");
            return;
        }

        BookNode temp = head.next;

        boolean flg = false;
        while (true){
            if (temp == null){
                break;
            }

            if (temp.id == node.id){
                flg = true;
                break;
            }

            temp = temp.next;
        }

        if (flg){
            temp.name = node.name;
            temp.price = node.price;
        }else {
            System.out.println("未找到要修改的节点...");
        }
    }

    /**
     * 双向链表删除
     *  条件:根据id编号进行删除节点
     */
    public void delNode(int id){
        if (head.next == null){
            System.out.println("空链表...");
            return;
        }

        BookNode temp = head.next;
        boolean flg = false;
        while (true){
            if (temp == null){
                break;
            }

            if (temp.id == id){
                flg = true;
                break;
            }

            temp = temp.next;
        }

        if (flg){
            temp.pre.next = temp.next;
            if (temp.next !=null){
                temp.next.pre = temp.pre;
            }

        }else {
            System.out.println("未找到该结点...");
        }


    }



}
package use1;

public class Test02 {
    public static void main(String[] args){
         DualLinkedList dualLinkedList = new DualLinkedList();

        BookNode bookNode1 = new BookNode(1,"红楼梦",66.00);
        BookNode bookNode2 = new BookNode(2,"西游记",66.00);
        BookNode bookNode3 = new BookNode(3,"水浒传",66.00);
        BookNode bookNode4 = new BookNode(4,"三国演义",66.00);

        dualLinkedList.addLast(bookNode1);
        dualLinkedList.addLast(bookNode2);
        dualLinkedList.addLast(bookNode3);
        dualLinkedList.addLast(bookNode4);

        //dualLinkedList.delNode(1);
        dualLinkedList.updateNode(new BookNode(3,"计算机",66.00));

        System.out.println("");





    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingshengda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值