java双向链表的基本实现

双向链表的基本实现,
删除
修改
添加(根据id有序添加和无序直接插入的添加)
显示所有的节点

package com.it.likedList;

import sun.awt.image.PixelConverter;

/**双向链表的实现(增删查改)
 * @author Snail-Bo
 * @date 2020/3/31 16:16
 */
public class BidirectionalLinkedListDemo {
    public static void main(String[] args) {
        UserNode4 user1 = new UserNode4(1,"张三",1);
        UserNode4 user2 = new UserNode4(2,"周六",2);
        UserNode4 user3 = new UserNode4(3,"李四",3);
        BidirectionalLinkedList linkedList = new BidirectionalLinkedList();
        linkedList.add2(user1);
        linkedList.add2(user3);
        linkedList.add2(user2);
        linkedList.showAll();
       /* System.out.println("删除后:");
        linkedList.deleteNode(4);
        linkedList.showAll();*/
    }
}
class BidirectionalLinkedList{
    UserNode4 head = new UserNode4(0,null,0);

    /**
     * 无序插入
     * @param userNode4
     */
    public void add(UserNode4 userNode4){
        UserNode4 temp = head;
        boolean flag = false;
        while (true){
            if (temp.next==null){
                flag=true;
                break;
            }
           temp = temp.next;
        }
        if (flag){
            temp.next=userNode4;
            userNode4.pre=temp;
        }else {
            System.out.println("添加失败");
        }
    }

    /**
     * 按id顺序进行插入
     * @param userNode4
     */
    public void add2(UserNode4 userNode4){
        UserNode4 temp = head;
        boolean flag = false;
        while (true){
            if(temp.next==null){
                break;
            }
            if (temp.next.getId()>userNode4.getId()){   //temp为要插入的节点的前一个节点
                break;
            }if(temp.getId()==userNode4.getId()){
                flag=true;
                break;
            }
            temp = temp.next;
        }
        if (flag){
            System.out.println("该节点已经存在,添加失败");
        }else {
                if(temp.next!=null){   //判断是否为最后一个节点
                    userNode4.next=temp.next;  //进行temp节点的后一个节点和当前节点的连接
                    temp.next.pre=userNode4;
                }
                temp.next=userNode4;    //temp 节点和插入节点的连接
                userNode4.pre=temp;
        }
    }

    /**
     * 修改节点
     * @param userNode4
     * @return
     */
    public void updateNode(UserNode4 userNode4){
        if(head.next==null){
            System.out.println("链表为空");
            return ;
        }
        UserNode4 cur = head.next;
        boolean flag = false;
        while(cur.next!=null){
            if(cur.getId()==userNode4.getId()){
                flag=true;
                break;
            }
            cur= cur.next;
        }
        if(flag){
            cur.setName(userNode4.getName());
            cur.setNum(userNode4.getNum());
        }else {
            System.out.println("没有找到");
        }
    }

    /**
     * 删除节点
     * @param id
     */
    public void deleteNode(int id){
        if (head.next==null){
            System.out.println("链表为空");
            return;
        }
        UserNode4 temp = head.next;
        boolean flag = false;
        while (temp!=null){
            if (temp.getId()==id){   //直接找到要被删除的节点
                flag=true;
                break;
            }
            temp = temp.next;
        }

        if (flag){
            temp.pre.next=temp.next;
            if(temp.next!=null){        //判断是否为最后一个节点
                temp.next.pre=temp.pre;
            }
        }else {
            System.out.println("没有找到该"+id+"的id");
        }

    }

    /**
     * 查看所有的双向链表的节点
     */
    public void showAll(){
        if(head.next==null){
            System.out.println("链表为空");
            return;
        }
        UserNode4 temp = head.next;
        while (temp!=null){
            System.out.println(temp);
            temp = temp.next;
        }
    }


}

class UserNode4{
    private int id;
    private String name;
    private int num;
    UserNode4 pre;
    UserNode4 next;

    public UserNode4(int id, String name, int num) {
        this.id = id;
        this.name = name;
        this.num = num;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public UserNode4 getPre() {
        return pre;
    }

    public void setPre(UserNode4 pre) {
        this.pre = pre;
    }

    public UserNode4 getNext() {
        return next;
    }

    public void setNext(UserNode4 next) {
        this.next = next;
    }

    @Override
    public String toString() {
        return "UserNode4{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", num=" + num +
              /*  ", pre=" + pre +*/
                ", next=" + next +
                '}';
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值