实现双向链表的增删改查功能。

实现双向链表的增删改查功能,增加功能分为无序增加和有序增加。

package com.yu.linkedlist;
/**
 * 双向链表增删改查询
 * @author Administrator
 *
 */
public class DoubleLinkedListDemo {

    public static void main(String[] args) {
        User u1 = new User(1,"刘备");
        User u2 = new User(2,"关羽");
        User u3 = new User(3,"张飞");
        User u4 = new User(4,"赵云");
        DoubleLinkedDemo demo = new DoubleLinkedDemo();
        demo.addOrderBy(u2);
        demo.addOrderBy(u4);
        demo.addOrderBy(u1);
        demo.addOrderBy(u3);
        demo.show();
//        System.out.println("修改数据");
//        demo.update(new User(3,"诸葛亮"));
//        demo.show();
//        System.out.println("删除数据...");
//        demo.delete(4);
//        demo.show();
    }
}

/**
 * 双向链表的基本操作
 * @author Administrator
 *
 */
class DoubleLinkedDemo {
    
    
    private User user = new User(0,"");//定义一个空参的单向链表
    
    /**
     * 实现双向链表的有序新增
     * @param u
     */
    public void addOrderBy(User u){
        User temp = user;
        boolean flag1 = false;
        boolean flag2 = false;
        boolean flag3 = false;
        while(true) {
            if(temp.getNext() == null) {
                flag1 = true;
                break;
            }else if(temp.getNext().getNo() > u.getNo()){
                flag2 = true;
                break;
            }else if(temp.getNext().getNo() == u.getNo()) {
                flag3 = true;
                break;
            }
            temp = temp.getNext();
        }
        if(flag1) {
            temp.setNext(u);
            u.setPre(temp);
        }else if(flag2){
            temp.getNext().setPre(u);
            u.setNext(temp.getNext());
            temp.setNext(u);
            u.setPre(temp);
            
        }else if(flag3) {
            System.out.println("此编号的数据已经存在了");
        }
    }
    
    /**
     * 无序增加双向链表
     * @param user
     */
    public void add(User u) {
        User temp = user;
        while(temp.getNext() != null) {
            temp = temp.getNext();
        }
        temp.setNext(u);
        u.setPre(temp);
    }
    
    /**
     * 显示双向链表
     */
    public void show() {
        User temp = user.getNext();
        if(temp == null) {
            System.out.println("单向链表为空...");
            return;
        }
        while(true) {
            if(temp == null) {
                break;
            }
            System.out.println(temp);
            temp = temp.getNext();
        }
    }
    
    /**
     * 修改双向链表
     */
    public void update(User u) {
        User temp = user.getNext();
        boolean flag = false;
        if(temp == null) {
            System.out.println("双向链表为空...");
            return;
        }
        while(true) {
            if(temp == null) {
                break;
            }else if(temp.getNo() == u.getNo()) {
                flag = true;
                break;
            }
            temp = temp.getNext();
        }
        if(flag) {
            temp.setName(u.getName());
        }else {
            System.out.println("没有找到要修改的编号:" + u.getNo());
        }
    }
    
    /**
     * 删除双向链表
     */
    public void delete(int no) {
        User temp = user.getNext();
        boolean flag = false;
        if(temp == null) {
            System.out.println("双向链表为空...");
            return;
        }
        while(true) {
            if(temp == null) {
                break;
            }else if(temp.getNo() == no) {
                flag = true;
                break;
            }
            temp = temp.getNext();
        }
        if(flag) {
            temp.getPre().setNext(temp.getNext());
            if(temp.getNext() != null) {
                temp.getNext().setPre(temp.getPre());
            }
        }else {
            System.out.println("没有找到要删除的编号...");
        }
    }
}


/**
 * 用户实体信息
 * @author Administrator
 *
 */
class User {
    
    private int no;
    private String name;
    private User pre;
    private User next;
    
    public User(int no,String name) {
        this.no = no;
        this.name = name;
    }
    
    public int getNo() {
        return no;
    }
    public void setNo(int no) {
        this.no = no;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public User getPre() {
        return pre;
    }
    public void setPre(User pre) {
        this.pre = pre;
    }
    public User getNext() {
        return next;
    }
    public void setNext(User next) {
        this.next = next;
    }

    @Override
    public String toString() {
        return "User [no=" + no + ", name=" + name + "]";
    }
    
    
    
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值