public class MyListNode {
public static void main(String[] args) {
SingleLinked singleLinked = new SingleLinked();
MyNode myNode1 = new MyNode(1,"小一");
MyNode myNode2 = new MyNode(2,"小二");
MyNode myNode3 = new MyNode(3,"小三");
MyNode myNode4 = new MyNode(4,"小四");
MyNode myNode5 = new MyNode(5,"小五");
/*singleLinked.addNode(myNode1);
singleLinked.addNode(myNode2);
singleLinked.addNode(myNode3);
singleLinked.addNode(myNode4);
singleLinked.addNode(myNode5);
singleLinked.showLinked(singleLinked.getHead());
System.out.println("----------修改---------------");
singleLinked.updateLinked(new MyNode(5,"小小吴"));
singleLinked.showLinked(singleLinked.getHead());
System.out.println("----------删除---------------");
singleLinked.delLinked(5);
singleLinked.showLinked(singleLinked.getHead());*/
singleLinked.addRecords(myNode1);
singleLinked.addRecords(myNode5);
singleLinked.addRecords(myNode3);
singleLinked.showLinked(singleLinked.getHead());
}
}
class SingleLinked{
private MyNode head = new MyNode(0,"");//声明头结点
//头结点是方便用来查找
//定义个方法来获取头结点
public MyNode getHead(){
return head;
}
//添加节点
public void addNode(MyNode myNode){
MyNode temp = head;
//添加数据是从链表的最后来添加
//如何确认最后的位置?只能,节点.next 这样来遍历下去,直到值为null就找到位置
while(true){
if (temp.next == null){
break;
}
temp = temp.next;
}
temp.next = myNode;
}
//显示列表
public void showLinked(MyNode head){
//判断链表是否为空
if(head.next == null){
System.out.println("链表为空!");
return;
}
//因为头结点是不能动的,所以需要一个辅助节点
MyNode temp = head.next;
while(true){
if (temp == null){
break;
}
System.out.println("显示:"+temp);
temp = temp.next;
}
}
//1 张三 -> 2 李四 -> 3 王五
// if(temp.id = myNode.id) temp.name = myNode.name
//修改链表节点数据
public void updateLinked(MyNode myNode){
//判断链表是否为空
if(head.next == null){
System.out.println("链表为空!");
return;
}
//定义一个辅助链表;
MyNode temp = head.next;
boolean flag = false;
//是否找到对应的节点
while(true){
//找到了对应的id
if(temp.id == myNode.id){
flag = true;
break;
}
//找不到,则显示为空
if (temp.next == null){
System.out.println("链表为空!");
return ;
}
temp = temp.next;
}
if(flag){
temp.name = myNode.name;
}else{
System.out.println("没有找到!");
}
}
public void delLinked(int id){
MyNode temp = head;
boolean flag = false;
//找到待删除的前一个节点
while(true){
//已经遍历到最后,则退出循环
if(temp.next == null){
System.out.println("已经到最后");
break;
}
//找到
if(temp.next.id == id){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
temp.next = temp.next.next;
}else{
System.out.println("没有找到该节点!");
}
}
// 1 - > 5 -> 3 变成 1 -> 3 -> 5
public void addRecords(MyNode myNode){
MyNode temp = head;
boolean flag = false;
while(true){
if (temp.next == null){
temp.next = myNode;
System.out.println("链表到最后了");
break;
}else if (temp.next.id > myNode.id){
flag = true;
break;
}else if(temp.next.id == myNode.id){
break;
}
temp = temp.next;
}
if (flag){
myNode.next = temp.next;
temp.next = myNode;
}
}
}
class MyNode{
public int id; //id
public String name;//姓名
public MyNode next;//用来指向下一个节点
public MyNode(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "MyNode{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
Java链表的简单增删改查
最新推荐文章于 2024-05-15 01:57:46 发布