package Test; //数据结构链表的实现 public class TestList01 { public static void main(String[] args) { TestList testList=new TestList(); 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,"王志财","男男"); // testList.add(node1); // testList.add(node2); // testList.add(node3); // testList.add(node4); // testList.list(); System.out.println("第二种插入顺序!!!"); //按照编号的顺序,虽然插入顺序不一致,但是在链表中还是以id号顺序 testList.addByOrder(node2); testList.addByOrder(node3); testList.addByOrder(node1); testList.addByOrder(node4); testList.list(); testList.UpDate(node5); System.out.println("更新后的节点为"); testList.list(); System.out.println("删除操作后"); testList.Remove(2); testList.Remove(1); testList.Remove(4); testList.list(); } } class Node{ public int id; public String StudentName; public String Sex; public Node next;//指向下一个节点 public Node(int id,String studentName,String Sex){ this.id=id; this.Sex=Sex; this.StudentName=studentName; } @Override public String toString() { return "Node{" + "id=" + id + ", StudentName='" + StudentName + '\'' + ", Sex='" + Sex + '\'' + '}'; } } class TestList{ //定义一个头结点,头结点不动,也不存放数据 private Node head=new Node(0,"",""); //添加节点到单向链表中 public void add(Node node){ //找到尾结点,使尾结点指向下一个新节点 //新设一个变量,使头结点保持不变 Node temp=head; //遍历链表,找到最后一个判断是否为空 while(true){ if(temp.next==null){ break; } temp=temp.next; } //当while循环遍历完成时,此时temp就指向了链表最后一个节点 //使此时的temp.next指向新的节点 temp.next=node; System.out.println("已添加"); } //第二种添加方法 public void addByOrder(Node node){ Node temp=head; boolean flag=false;//表示要添加元素的编号已经存在 while(true) { if (temp.next == null) { break; } if(temp.next.id>node.id){//表示要插入元素的id不在,就在temp后面插入 break; }else if(temp.next.id==node.id){//表示要插入元素的id已经存在 flag=true; break; } temp=temp.next; } //判断flag的值, if(flag){ System.out.printf("插入元素编号已经存在%d",temp.next.id); }else{//插入temp的后面 node.next=temp.next; temp.next=node; } } //显示链表 public void list(){ if(head.next==null){ System.out.println("此链表为空"); return; } Node temp=head.next; while(true) { if (temp == null){ break; } System.out.println(temp); //将temp后移 temp=temp.next; } } //修改节点的信息,根据编号来修改 public void UpDate(Node node){//根据节点的id值来修改 if(head.next==null){ System.out.println("链表为空"); return; } boolean flag=false; Node temp=head.next; while(true){ if(temp==null){ break;//链表已经遍历完成 } if (temp.id==node.id){//找到眼修改的元素 flag=true; break; } temp=temp.next; } if(flag){//根据flag判断要修改的节点 temp.StudentName=node.StudentName; temp.Sex=node.Sex; }else{ System.out.println("没有找到要修改的节点"); } } //单列表节点的删除 public void Remove(int id){ Node temp=head; if(temp.next==null){ System.out.println("链表为空"); } boolean flag=false; while(true){ if(temp.next==null){ break;//链表已经遍历完成 } if(temp.next.id==id){ flag=true; break; } temp=temp.next; } if (flag){ temp.next=temp.next.next; }else{ System.out.println("没有找到要删除的节点"); } } }
《数据结构》单链表的创建增删改查
最新推荐文章于 2022-05-24 15:08:22 发布