class BookNode
public class BookNode {
public int id;
public String name;
public double price;
public BookNode next;
public BookNode pre;
public BookNode ( int id, String name, double price) {
this . id = id;
this . name = name;
this . price = price;
}
@Override
public String toString ( ) {
return "BookNode{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}' ;
}
}
class DualLinkedList
public class DualLinkedList {
private BookNode head = new BookNode ( 0 , "" , 0.0 ) ;
public void addLast ( BookNode newNode) {
BookNode temp= head;
while ( true ) {
if ( temp. next== null ) {
break ;
}
temp= temp. next;
}
temp. next= newNode;
newNode. pre= temp;
}
public void updateNode ( BookNode newNode) {
if ( head. next== null ) {
throw new RuntimeException ( "此双向链表为空链表" ) ;
}
BookNode temp= head. next;
boolean flg= false ;
while ( true ) {
if ( temp== null ) {
break ;
}
if ( temp. id== newNode. id) {
flg= true ;
break ;
}
temp= temp. next;
}
if ( flg) {
temp. name= newNode. name;
temp. price= newNode. price;
} else {
throw new RuntimeException ( "此链表中不存在要修改的结点" ) ;
}
}
public void delNode ( int id) {
if ( head. next== null ) {
throw new RuntimeException ( "此链表为空链表" ) ;
}
BookNode temp= head;
boolean flg= false ;
while ( true ) {
if ( temp. next== null ) {
break ;
}
if ( temp. next. id== id) {
flg= true ;
break ;
}
temp= temp. next;
}
if ( flg) {
temp. next= temp. next. next;
if ( temp. next!= null ) {
temp. next. pre= temp;
}
} else {
throw new RuntimeException ( "此链表中不存在要被删除的结点" ) ;
}
}
public void list ( ) {
if ( head. next== null ) {
throw new RuntimeException ( "此双向链表为空链表" ) ;
}
BookNode temp= head. next;
while ( true ) {
if ( temp== null ) {
break ;
}
System . out. println ( temp) ;
temp= temp. next;
}
}
public void orderLinkedList ( BookNode bookNode) {
BookNode temp= head;
if ( temp. next== null ) {
temp. next= bookNode;
return ;
}
boolean flg= false ;
while ( true ) {
if ( temp. next== null ) {
break ;
}
if ( temp. next. id> bookNode. id) {
flg= true ;
break ;
} else {
if ( temp. next. id== bookNode. id) {
temp. next. name= bookNode. name;
temp. next. price= bookNode. price;
return ;
}
}
temp= temp. next;
}
if ( flg== true ) {
temp. next. pre= bookNode;
bookNode. next= temp. next;
temp. next= bookNode;
bookNode. pre= temp. next;
} else {
temp. next= bookNode;
bookNode. pre= temp;
}
}
}
class DualLinkedListTest
public class DualLinkedListTest {
public static void main ( String [ ] args) {
DualLinkedList dualLinkedList= new DualLinkedList ( ) ;
BookNode bookNode1 = new BookNode ( 1 , "百年孤独" , 199 ) ;
BookNode bookNode2 = new BookNode ( 2 , "百年孤独" , 299 ) ;
BookNode bookNode3 = new BookNode ( 3 , "百年孤独" , 399 ) ;
BookNode bookNode4 = new BookNode ( 4 , "百年孤独" , 499 ) ;
dualLinkedList. orderLinkedList ( bookNode4) ;
dualLinkedList. orderLinkedList ( bookNode3) ;
dualLinkedList. orderLinkedList ( bookNode2) ;
dualLinkedList. orderLinkedList ( bookNode1) ;
dualLinkedList. orderLinkedList ( new BookNode ( 3 , "java编程思想" , 199 ) ) ;
dualLinkedList. list ( ) ;
}
}