实现双向链表的增删改查功能,增加功能分为无序增加和有序增加。
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 + "]"; } }