前奏:
链表的特点:是各个相依节点的地址空间不一定是连续的所以这样就充分利用的内存中的碎片内存
节点代码
public class MyNode {
public Object objectValue;
public MyNode nextNode;
public MyNode ( Object objectValue) {
this . objectValue= objectValue;
}
@Override
public String toString ( ) {
return "当前节点:" + objectValue+ "===下一个相依节点:" + ( nextNode== null? "空" : nextNode. objectValue) ;
}
}
单项排序链表添加图解
添加排序代码
public class MyLinkList {
MyNode headNode= new MyNode ( null) ;
public void addLinkOrderBy ( Object objValue) {
MyNode currNode= headNode;
MyNode newNode= new MyNode ( objValue) ;
MyNode temporary= null;
while ( currNode. nextNode!= null) {
temporary= currNode. nextNode;
if ( ( Integer) temporary. objectValue> ( Integer) objValue) {
break ;
}
currNode= temporary;
}
if ( currNode. nextNode== null) {
currNode. nextNode= newNode;
} else {
newNode. nextNode= currNode. nextNode;
currNode. nextNode= newNode;
}
}
}
单项排序链表删除图解
删除代码
public void delete ( Object delValue) {
MyNode currNode= headNode;
MyNode temporary= null;
while ( currNode. nextNode!= null) {
temporary= currNode. nextNode;
if ( ( Integer) temporary. objectValue== ( Integer) delValue) {
break ;
}
currNode= temporary;
}
if ( currNode. nextNode== null) {
throw new RuntimeException ( "没有对应的链表信息,无法删除" ) ;
} else {
currNode. nextNode= currNode. nextNode. nextNode;
}
}
单项循环排序链表思路 图解
注意:不带头结点的
写法思考的5个问题 如果把5个问题处理好你就会单项循环链表了
1:由于是循环链表如果情况下判断链表是为最后一个怎么处理
2:当链表一开始为空的时候添加节点怎么处理
3:当添加的节点在链表最前怎么去处理
4:当添加的节点在链表中间怎么去处理
5:当添加的节点在链表最后面怎么去处理
代码
public void addNodeOrderBy ( Object value) {
MyNode currNode= headNode;
MyNode temporary= null;
while ( currNode. nextNode!= null) {
temporary= currNode. nextNode;
if ( ( Integer) temporary. objectValue> ( Integer) objValue) {
break ;
}
currNode= temporary;
if ( currNode. nextNode== headNode. nextNode) {
break ;
}
}
if ( currNode. nextNode== null) {
newNode. nextNode= newNode;
currNode. nextNode= newNode;
} else if ( currNode== headNode) {
MyNode lastNode= headNode;
while ( lastNode. nextNode!= null) {
temp= lastNode. nextNode;
lastNode= temp;
if ( lastNode. nextNode== headNode. nextNode) {
break ;
}
}
lastNode. nextNode= newNode;
newNode. nextNode= currNode. nextNode;
currNode. nextNode= newNode;
} else if ( currNode. nextNode== headNode. nextNode) {
newNode. nextNode= currNode. nextNode;
currNode. nextNode= newNode;
} else {
newNode. nextNode= currNode. nextNode;
currNode. nextNode= newNode;
}
}
注意:带头结点的 图解
写法思考的4个问题 如果把4个问题处理好你就会单项循环链表了
1:由于是循环链表如果情况下判断链表是为最后一个怎么处理
2:当链表一开始为空的时候添加节点怎么处理
3:当添加的节点在链表最后面怎么去处理
4:当添加的节点在链表中间怎么去处理
代码
public void addNodeOrderBy ( Object objValue) {
MyNode currNode= headNode;
MyNode temp= null;
while ( currNode. nextNode!= null&& currNode. nextNode!= headNode) {
temp= currNode. nextNode;
if ( ( Integer) temp. objectValue> ( Integer) objValue) {
break ;
}
currNode= temp;
}
if ( currNode. nextNode== null|| currNode. nextNode== headNode) {
newNode. nextNode= headNode;
currNode. nextNode= newNode;
} else {
newNode. nextNode= currNode. nextNode;
currNode. nextNode= newNode;
}
}