单向链表查找只能是一个方向,而双向链表可以向前或向后查找
单向链表不能自我删除,需要靠辅助结点,需要找到待删除节点的前一个节点,而双向链表可以自我删除
class DTeam {
int no;
String leader;
public DTeam(int no, String leader) {
this.no = no;
this.leader = leader;
}
@Override
public String toString() {
return "DTeam{" +
"no=" + no +
", leader='" + leader + '\'' +
'}';
}
}
class DTeamNode {
DTeam dTeam;
DTeamNode prev;
DTeamNode next;
public DTeamNode(DTeam dTeam) {
this.dTeam = dTeam;
}
}
class DTeamNodeList {
private DTeamNode headNode = new DTeamNode(null);
public void add(DTeam newDTeam) {
DTeamNode newDTeamNode = new DTeamNode(newDTeam);
DTeamNode curNode = headNode;
while(curNode.next != null) {
curNode = curNode.next;
}
curNode.next = newDTeamNode;
newDTeamNode.prev = curNode;
}
public void addByOrder(DTeam newDTeam) {
DTeamNode newDTeamNode = new DTeamNode(newDTeam);
DTeamNode curNode = headNode;
while(curNode.next != null) {
if(curNode.next.dTeam.no == newDTeam.no) {
System.out.println("编号已存在,添加失败");
return;
}
if(curNode.next.dTeam.no > newDTeam.no) {
break;
}
curNode = curNode.next;
}
if(curNode.next != null) {
curNode.next.prev = newDTeamNode;
}
newDTeamNode.next = curNode.next;
curNode.next = newDTeamNode;
newDTeamNode.prev = curNode;
}
public void update(DTeam newDTeam) {
DTeamNode newDTeamNode = new DTeamNode(newDTeam);
DTeamNode curNode = headNode.next;
while(curNode != null) {
if(curNode.dTeam.no == newDTeam.no) {
break;
}
curNode = curNode.next;
}
if(curNode == null) {
System.out.println("改编号不存在,修改失败");
return;
}
curNode.dTeam.leader = newDTeam.leader;
}
public void deleteNode(int no) {
DTeamNode curNode = headNode.next;
while(curNode != null) {
if(curNode.dTeam.no == no) {
break;
}
curNode = curNode.next;
}
if(curNode == null) {
System.out.println("改编号不存在,删除失败");
return;
}
curNode.next.prev = curNode.prev;
curNode.prev.next = curNode.next;
}
public void listNodes() {
DTeamNode curNode = headNode.next;
while(curNode != null) {
System.out.println(curNode.dTeam);
curNode = curNode.next;
}
}
}
public class DoubleLinkedDemo {
public static void main(String[] args) {
DTeamNodeList teamNodeList = new DTeamNodeList();
DTeam team1 = new DTeam(1, "山本元柳斎重国");
DTeam team4 = new DTeam(4, "卯之花烈");
DTeam team6 = new DTeam(6, "朽木白哉");
DTeam team8 = new DTeam(8, "京乐春水");
DTeam team10 = new DTeam(10, "日番谷冬狮郎");
DTeam team13 = new DTeam(13, "浮竹十四郎");
DTeam team13_new = new DTeam(13, "朽木露琪亚");
teamNodeList.add(team1);
teamNodeList.add(team4);
teamNodeList.add(team6);
teamNodeList.add(team13);
System.out.println("============add============");
teamNodeList.listNodes();
// Team{no=1, leader='山本元柳斎重国'}
// Team{no=4, leader='卯之花烈'}
// Team{no=6, leader='朽木白哉'}
// Team{no=13, leader='浮竹十四郎'}
System.out.println("============addByOrder============");
teamNodeList.addByOrder(team8);
teamNodeList.listNodes();
// Team{no=1, leader='山本元柳斎重国'}
// Team{no=4, leader='卯之花烈'}
// Team{no=6, leader='朽木白哉'}
// Team{no=8, leader='京乐春水'}
// Team{no=13, leader='浮竹十四郎'}
System.out.println("============update============");
teamNodeList.update(team13_new);
teamNodeList.listNodes();
// Team{no=1, leader='山本元柳斎重国'}
// Team{no=4, leader='卯之花烈'}
// Team{no=6, leader='朽木白哉'}
// Team{no=8, leader='京乐春水'}
// Team{no=13, leader='朽木露琪亚'}
System.out.println("============deleteNode============");
teamNodeList.deleteNode(4);
teamNodeList.listNodes();
// Team{no=1, leader='山本元柳斎重国'}
// Team{no=6, leader='朽木白哉'}
// Team{no=8, leader='京乐春水'}
// Team{no=13, leader='朽木露琪亚'}
}
}