public class MM {
public static void main(String args[]) {
Node node1=new Node(1,"张三");
Node node2=new Node(2,"李四");
Node node3=new Node(3,"王五");
Node node4=new Node(4,"二麻子");
Node node5=new Node(4,"二麻子");
Node NeedUpdateNode=new Node(1,"二麻子");
SingleLinkedNodeList singleLinkedNodeList=new SingleLinkedNodeList();
//加入到末尾
// singleLinkedNodeList.addToEnd(node1);
// singleLinkedNodeList.addToEnd(node2);
// singleLinkedNodeList.addToEnd(node3);
// singleLinkedNodeList.addToEnd(node4);
//显示
// singleLinkedNodeList.showList();
//按编号添加
// singleLinkedNodeList.addByOrder(node4);
// singleLinkedNodeList.addByOrder(node1);
// singleLinkedNodeList.addByOrder(node3);
// singleLinkedNodeList.addByOrder(node2);
// //显示
// singleLinkedNodeList.showList();
//按编号顺序添加,编号可以重复
singleLinkedNodeList.addBynoRank(node4);
singleLinkedNodeList.addBynoRank(node5);
singleLinkedNodeList.addBynoRank(node1);
singleLinkedNodeList.addBynoRank(node3);
singleLinkedNodeList.addBynoRank(node2);
//显示
singleLinkedNodeList.showList();
// //改变节点
// singleLinkedNodeList.update(NeedUpdateNode);
System.out.println("-----------------------");
//删除节点
singleLinkedNodeList.deleteNode(1);
singleLinkedNodeList.deleteNode(2);
singleLinkedNodeList.deleteNode(3);
singleLinkedNodeList.deleteNode(4);
singleLinkedNodeList.deleteNode(4);
singleLinkedNodeList.deleteNode(4);
//再次显示
singleLinkedNodeList.showList();
}
}
class SingleLinkedNodeList {
//初始化一个头节点
private Node head=new Node(0," ");
//添加节点到单向链表末尾
public void addToEnd(Node node){
Node temp =head;
//遍历链表找到最后
while (true){
if(temp.next==null)
{
break;
}
temp=temp.next;
}
temp.next=node;
}
//按照编号顺序添加
public void addByOrder(Node node){
Node temp=head;
//定义一个flag表示节点是否被添加
boolean flag=false;
//找到node.no前一个节点
while (true){
if(temp.next==null)break;
if(temp.next.no>node.no){//找到位置
break;
}
if(temp.next.no==node. no){
flag =true;//编号存在
break;
}
temp=temp.next;
}
if(flag)System.out.println("待插入的编号"+node.no+"已经存在不能添加");
else{
node.next=temp.next;
temp.next=node;
}
}
//按编号大小添加
public void addBynoRank(Node node){
//先找到添加节点的地方
Node temp= head;
while (true){
if(temp.next==null)break;
if(temp.next.no>node.no)break;
temp=temp. next;
}
node.next=temp.next;
temp.next=node;
}
//显示链表
public void showList(){
//判断链表为空
if(head.next==null)return ;
Node temp = head.next;
while (true){
if(temp==null)break;
//输出节点信息
System.out.println(temp);
temp=temp. next;
}
}
//修改节点
public void update(Node node) {
//判断是否为空
if(node.next == head)throw new RuntimeException("链表为空!");
//找到需要修改的节点
Node temp=head.next;
boolean flag=false;//是否找到该节点
while (true){
if(temp==null)break;
if(temp.no==node.no){
flag =true;//找到了
break;
}
temp=temp.next;
}
if (flag)temp.name=node.name;
else {
System.out.println("该编号的节点不存在");
}
}
//删除节点,根据特定条件删除,比如no
public void deleteNode(int no){
if(head.next == null){
System.out.println("链表为空");
return;
}
Node 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){
temp.next=temp.next.next;
}else{
System.out.println("该节点不存在");
}
}
}
class Node{
public int no;
public String name;
public Node next;//指向下一个节点
public Node(int no,String name){
this.no = no;
this.name = name;
}
//为了显示方法.重写toString
@Override
public String toString() {
return "Node{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
}
java 链表的实现
最新推荐文章于 2024-08-17 08:59:42 发布