java单向链表CRUD的实现

it2023-10-11  66

什么是链表

链表是以节点的方式进行存储的,是链式存储每个节点包含date域和next域:指向下一个节点链表的各个节点不一定是连续的,这样做的作用的更好的利用碎片化的内存单向链表分为带头节点和不带头节点,根据需求自定义就可以

代码实现

单向链表实现 –水浒英雄排行榜管理完成对英雄人物的增删改查操作

1.创建节点Node类

package com.csdn.linkedlist; /** *创建节点,此例子链表存储的为绿林好汉,并能存储下一个节点的地址 */ public class Node { String name;//名字 String nikeName;//昵称 Integer no;//排名 Node next;//存储下个节点位置 public Node(String name, String nikeName, Integer no) { this.name = name; this.nikeName = nikeName; this.no = no; } public Node() { } @Override public String toString() { return "Node{" + "name='" + name + '\'' + ", nikeName='" + nikeName + '\'' + ", no=" + no + '}'; } }

2.创建链表类

public class LinkedLiset { Node head;// //无参构造方法,链表创建时,创建链表头 public LinkedLiset() { this.head = new Node(null, null, 0); } }

3,无脑增加节点方法add 我们只要找到最后一个节点,将节点的next属性指向我们传递的参数 就可以

//增加 public void add(Node node) { Node temp = head;//创建辅助节点 //找到链表的最后一个节点 while (true) { if (temp.next == null) { break; } temp = temp.next; } temp.next = node; }

4.遍历方法show()

//遍历 public void show() { Node temp=head.next;//找到一个有效节点 if (temp==null){//如果为空,证明为空节点直接结束方法 System.out.println("linkedlist is empety"); return; } while (true){//循环遍历 输出前判断节点是否有效 if (temp==null){ break; } System.out.println(temp); temp=temp.next; } }

5修改方法udate()

//根据no修改name和nikename public void upDate(Node node){ Node temp=head.next;//创建辅助节点 if (temp==null){//判断是否为空链表 System.out.println("linkedlist is empety"); return; } //遍历链表 boolean flag=false;//创建标记 默认为false,找到true while (true){ if (temp==null){ break; } if (temp.no==node.no){ flag=true; break; } temp=temp.next; } if (true){ temp.name=node.name; temp.nikeName=node.nikeName; }else { System.out.println("链表中没有这个no"); } }

6.删除方法 删方法的思路:我们找到被删除节点的前一个节点,让这个节点的next直接直接跳过被删除节点,直接指向下一个

//根据no删除链表中的节点 public void delete(int no){ Node temp=head; if (head.next==null){ System.out.println("链表为空"); return; } //遍历链表 找到要删除节点的前一个节点 boolean flag=false;//设置标记 while (true){ if (temp.next.no==no){ flag=true; break; } if (temp.next==null){ break; } temp=temp.next; } if (flag){ temp.next=temp.next.next;//让被删除节点的前一个节点的next跳过被删除节点,直接指向下一个 }else { System.out.println("链表中没有这个节点"); } }

7.根据排名添加 ,不能有重复addByNo() 这里按照顺序添加 需要先找到加入位置的前一个节点,让新节点的next为temp.next再让temp.next=node;

//根据排名增加,不可重复添加 public void addByNo(Node node){ Node temp=head;//定义辅助节点 //遍历链表 找到node的前一个节点 把新节点加到其前面 boolean flag=false;//创建标记 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("绿林好汉编号已经存在"); }else { node.next=temp.next; temp.next=node; } }
最新回复(0)