单链表
package algorithm. linkedlist;
public class SingleLinkedListDemo {
public static void main ( String[ ] args) {
SingleLinkedList list = new SingleLinkedList ( ) ;
HeroNode node1 = new HeroNode ( 1 , "孙悟空" , "大师兄" ) ;
HeroNode node2 = new HeroNode ( 2 , "猪八戒" , "二师兄" ) ;
HeroNode node3 = new HeroNode ( 3 , "沙悟净" , "三师兄" ) ;
HeroNode node4 = new HeroNode ( 4 , "敖烈" , "小白龙" ) ;
list. addByOrder ( node3) ;
list. addByOrder ( node1) ;
list. addByOrder ( node4) ;
list. addByOrder ( node2) ;
list. list ( ) ;
System. out. println ( "--------------修改后-------------" ) ;
list. update ( new HeroNode ( 3 , "牛魔王" , "孙悟空兄弟~~" ) ) ;
list. list ( ) ;
list. update ( new HeroNode ( 32 , "牛魔王" , "孙悟空兄弟~~" ) ) ;
System. out. println ( "---------------删除节点-------------" ) ;
HeroNode deleteByNo = list. deleteByNo ( 1 ) ;
list. deleteByNo ( 4 ) ;
list. list ( ) ;
System. out. println ( "----------------查找------------------" ) ;
HeroNode findByNo = list. findByNo ( 3 ) ;
System. out. println ( "找到" + findByNo. name + "节点" ) ;
}
}
class SingleLinkedList {
private HeroNode head = new HeroNode ( 0 , "头节点" , "" ) ;
public HeroNode getHead ( ) {
return head;
}
public void setHead ( HeroNode head) {
this . head = head;
}
public void list ( ) {
if ( head. next == null) {
System. out. println ( "空链表" ) ;
return ;
}
HeroNode temp = head. next;
while ( true ) {
if ( temp == null) {
break ;
}
System. out. println ( temp) ;
temp = temp. next;
}
}
public void add ( HeroNode node) {
HeroNode temp = head;
while ( true ) {
if ( temp. next == null) {
break ;
}
temp = temp. next;
}
temp. next = node;
}
public void addByOrder ( HeroNode node) {
HeroNode temp = head;
boolean flag = false ;
while ( true ) {
if ( temp. next == null) {
break ;
}
if ( temp. next. no > node. no) {
break ;
} else if ( temp. next. no == node. no) {
flag = true ;
break ;
}
temp = temp. next;
}
if ( flag) {
System. out. printf ( "插入的节点的no=%d已存在" , node. no) ;
} else {
node. next = temp. next;
temp. next = node;
}
}
public void update ( HeroNode node) {
if ( head. next == null) {
System. out. println ( "空链表" ) ;
return ;
}
HeroNode temp = head;
boolean flag = false ;
while ( true ) {
if ( temp. next == null) {
break ;
}
if ( temp. no == node. no) {
flag = true ;
break ;
}
temp = temp. next;
}
if ( flag) {
temp. name = node. name;
temp. nickName = node. nickName;
} else {
System. out. printf ( "没找到%d的节点信息\n" , node. no) ;
}
}
public HeroNode deleteByNo ( int no) {
if ( head. next == null) {
throw new RuntimeException ( "链表空" ) ;
}
HeroNode temp = head;
boolean flag = false ;
while ( true ) {
if ( temp. next == null) {
break ;
}
if ( temp. next. no == no) {
flag = true ;
break ;
}
temp = temp. next;
}
if ( flag) {
HeroNode val = temp. next;
temp. next = temp. next. next;
return val;
} else {
throw new RuntimeException ( "没找到" + no + "节点" ) ;
}
}
public HeroNode findByNo ( int no) {
HeroNode temp = head. next;
while ( true ) {
if ( temp == null) {
break ;
}
if ( temp. no == no) {
return temp;
}
temp = temp. next;
}
throw new RuntimeException ( "未找到" + no+ "节点" ) ;
}
}
class HeroNode {
int no;
String name;
String nickName;
HeroNode next;
public HeroNode ( int no, String name, String nickName) {
this . no = no;
this . name = name;
this . nickName = nickName;
}
@Override
public String toString ( ) {
return "HeroNode [no=" + no + ", name=" + name + ", nickName=" + nickName + "]" ;
}
}