节点
public class DoubleHeroNode { public int no; public String name; public String nickname; //后一个节点 public DoubleHeroNode next; //前一个节点 public DoubleHeroNode pre; public DoubleHeroNode(int hNo, String hName, String hNickname) { no = hNo; name = hName; nickname = hNickname; } @Override public String toString() { return "HeroNode{" + "no=" + no + ", name='" + name + '\'' + ", nickname='" + nickname + '\'' + '}'; } }
public class DoubleLinkedList { //初始化一个头结点,头结点作为一个标志位 private DoubleHeroNode head = new DoubleHeroNode(0, "", ""); public DoubleHeroNode getHead() { return head; } public void list() { if (head.next == null) { System.out.println("链表为空"); return; } DoubleHeroNode temp = head.next; while (true) { //判断是否到链表的最后 if (temp == null) { break; } System.out.println(temp); temp = temp.next; } } /** * 添加一个节点 * * @param doubleHeroNode */ public void add(DoubleHeroNode doubleHeroNode) { DoubleHeroNode temp = head; while (true) { if (temp.next == null) { temp.next = doubleHeroNode; doubleHeroNode.pre = temp; break; } temp = temp.next; } } //修改节点,编号不能修改 public void update(DoubleHeroNode newDoubleHeroNode) { DoubleHeroNode tem = head.next; while (true) { if (tem == null) { break; } if (tem.no == newDoubleHeroNode.no) { tem.nickname = newDoubleHeroNode.nickname; tem.name = newDoubleHeroNode.name; break; } tem = tem.next; } } public void delete(int no) { if (head.next == null) { return; } DoubleHeroNode tem = head.next; while (true) { if (tem == null) { break; } if (tem.no == no) { tem.pre.next = tem.next; //tem不是最后一个节点 if (tem.next != null) { tem.next.pre = tem.pre; } break; } tem = tem.next; } } //按照排序添加 public void addByOrder(DoubleHeroNode doubleHeroNode) { DoubleHeroNode temp = head.next; if (temp == null) { head.next = doubleHeroNode; doubleHeroNode.pre = head; return; } //是否找到 boolean flag = false; int no = doubleHeroNode.no; while (true) { if (no < temp.no) { flag = true; break; } if (temp.next != null) { temp = temp.next; } else { break; } } if (flag) { //插入到中间 doubleHeroNode.next = temp; doubleHeroNode.pre = temp.pre; temp.pre.next=doubleHeroNode; temp.pre = doubleHeroNode; } else { //插入到末尾 temp.next = doubleHeroNode; doubleHeroNode.pre = temp; } } }
测试
public class DoubleLinkedListDemo { public static void main(String[] args) { //DoubleLinkedList linkedList=new DoubleLinkedList(); //linkedList.add(new DoubleHeroNode(1,"宋江","")); //linkedList.add(new DoubleHeroNode(2,"卢俊义","")); //linkedList.add(new DoubleHeroNode(3,"吴用","")); //linkedList.add(new DoubleHeroNode(4,"林冲","")); //linkedList.delete(2); //linkedList.list(); DoubleLinkedList linkedList2=new DoubleLinkedList(); linkedList2.addByOrder(new DoubleHeroNode(2,"卢俊义","")); linkedList2.addByOrder(new DoubleHeroNode(1,"宋江","")); linkedList2.addByOrder(new DoubleHeroNode(9,"吴用","")); linkedList2.addByOrder(new DoubleHeroNode(4,"林冲","")); linkedList2.addByOrder(new DoubleHeroNode(3,"吴用","")); linkedList2.list(); //System.out.println(); //linkedList2.reversePrint(); //linkedList2.list(); //linkedList2.reverse(); //linkedList2.list(); } }