class TestLiistLink{
public static void main(String[] args) {
ListLink listLink=new ListLink();
//创建结点
ListNode node1=new ListNode(1,"he");
ListNode node2=new ListNode(2,"guang");
ListNode node3=new ListNode(3,"huan");
ListNode node4=new ListNode(4,"h");
ListNode node5=new ListNode(5,"x");
//添加结点
/*listLink.addListNode(node1);
listLink.addListNode(node2);
listLink.addListNode(node3);
listLink.addListNode(node4);
listLink.addListNode(node5);*/
listLink.addReorder(node2);
listLink.addReorder(node1);
listLink.addReorder(node3);
listLink.addReorder(node5);
listLink.addReorder(node4);
//显示结点
listLink.showListLink();
System.out.println("==================================");
//修改
ListNode updateNode=new ListNode(5,"llll");
listLink.updateListLink(updateNode);
listLink.showListLink();
System.out.println("===================================");
//删除
listLink.deleteListLink(5);
listLink.showListLink();
}
}
class ListLink{
//头结点
private ListNode head=new ListNode(0,"");
//返回头节点
public ListNode getHeadListNode() {
return head;
}
//添加结点
public void addListNode(ListNode listNode){
//因为头结点是不能移动的,所以我们需要一个辅助结点temp
ListNode temp=head;
while(true){
//如果当前结点是最后一个结点,那么就退出while循环,然后插入结点
if (temp.next==null){
break;
}
//否则指针后移,直到找到最后的一个结点为止
temp=temp.next;
}
//添加结点
temp.next=listNode;
}
//显示链表ListLink
public void showListLink(){
//判断链表是否为空
if (head.next==null){
System.out.println("链表为空!");
return;
}
//因为头结点是不能动的,所以需要一个辅助变量来遍历
ListNode temp=head.next;
while (true){
if (temp==null){
break;
}
System.out.println(temp);
temp=temp.next;
}
}
//修改链表结点数据
public void updateListLink(ListNode listNode){
//判断链表是否为空
if (head.next==null){
System.out.println("链表为空!");
return;
}
//定义一个辅助结点
ListNode temp=head;
boolean flag=false;
//是否找到对应结点
while(true){
//如果找到
if (temp.id==listNode.id){
flag=true;
break;
}
//防止空指针报错(如果是最后一个结点,就不让指针往后移了)
if (temp.next==null){
break;
}
temp= temp.next;//指针后移
}
if (flag){
//修改结点
temp.name=listNode.name;
}
else {
System.out.println("没有找到!id为:"+listNode.id);
}
}
//删除结点
public void deleteListLink(int id){
//辅助结点
ListNode temp=head;
boolean flag=false;
//找到待删除结点的前一个结点
while (true){
//已经遍历到最后,需要退出循环
if (temp.next==null){
break;
}
//找到(当temp.next为需要删除的结点时,那么当前的结点temp就是待删除结点的前一个结点了)
if (temp.next.id==id){
flag=true;
break;
}
//指针后移
temp=temp.next;
}
if (flag){
//重点
temp.next=temp.next.next;
}else {
System.out.println("没有找到!id为:"+id);
}
}
//链表排序插入
public void addReorder(ListNode listNode){
//辅助结点
ListNode temp=head;
boolean flag=false;
while(true){
//链表到最后
if (temp.next==null){
//如果是最后一个结点,那么就直接插入
flag=true;
break;
}else if (temp.next.id>listNode.id){
//如果当前结点的下一个结点的id比要插入的结点的id大
flag=true;
break;
}else if (temp.next.id==listNode.id){
break;
}
temp=temp.next;
}
if (flag){
listNode.next=temp.next;
temp.next=listNode;
}else {
//id重复
System.out.println("id"+listNode.id+"重复");
}
}
}
class ListNode {
public int id;
public String name;
public ListNode next;
public ListNode(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "ListNode{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
Java链表
最新推荐文章于 2024-09-21 10:38:43 发布