其他分享
首页 > 其他分享> > 单向链表的学习

单向链表的学习

作者:互联网

链表

单向链表:

package com.mianded.singlelist;

public class SingleListDemo {
  public static void main(String[] args) {
    StarNode starNode1 = new StarNode(1, "周杰伦");
    StarNode starNode2 = new StarNode(2, "手写的从前");
    StarNode starNode3 = new StarNode(3, "轨迹");
    StarNode starNode4 = new StarNode(6, "暗号");
    SingleList singleList =  new SingleList();
//    singleList.add(starNode1);
//    singleList.add(starNode2);
//    singleList.add(starNode3);
//    singleList.add(starNode4);
//    singleList.list();
    singleList.addByOrder(starNode1);
    singleList.addByOrder(starNode3);
    singleList.addByOrder(starNode4);
    singleList.addByOrder(starNode2);
//    singleList.addByOrder(starNode2);
    singleList.list();
    
    
    
//    测试修改update
//    StarNode starNode5 = new StarNode(1, "明明就");
//    singleList.update(starNode5);
//    System.out.println("修改完成后");
//    singleList.list();
    
    
    
//    测试删除
//    singleList.delate(10);
//    System.out.println("删除后");
//    singleList.list();
    
    System.out.println(getHeadLength(singleList.getHead()));
    
    
  }
  public static int getHeadLength(StarNode head) {
    if (head == null) {
      return 0;
    }
    StarNode temp = head.next;
    int length = 0;
    while(temp.next != null) {
      length++;
      temp = temp.next;
    }
    
    return length;
  }
}

class SingleList {
//  先初始化节点
  private StarNode head = new StarNode(0, null);
  
//  新增节点
  public void add(StarNode starNode) {
//    先遍历到尾部
    StarNode temp = head;
    while(temp.next != null) {
      temp = temp.next;
    }
    temp.next = starNode;
  }
  
//  展示
  void list() {
    StarNode temp = head.next;
    while(temp != null) {
      System.out.println(temp);
      temp = temp.next;
    }
  }
  
//  按照顺序增加
  public void addByOrder(StarNode starNode) {
    StarNode temp = head;
    boolean flag = false;
    while(temp.next != null) {
      if(temp.next.no > starNode.no) {
        break;
      } else if(temp.next.no == starNode.no) {
        flag = true;
        break;
      }
      temp = temp.next;
    }
    if (flag) {
      System.out.println("排名重复,无法添加");
    } else {
      starNode.next = temp.next;
      temp.next = starNode;
    }
  }

//  修改
  public void update(StarNode starNode) {
    StarNode temp = head;
    boolean flag = false;
    while(temp.next != null) {
      if(temp.no == starNode.no) {
        flag = true;
        break;
      }
      temp = temp.next;
    }
    if (flag) {
      temp.name = starNode.name;
    }else {
      System.out.println("序号为无效序号");
    }
    
  }

//  删除
  public void delate(int no) {
    StarNode temp = head;
    boolean flag = false;
    while(temp.next != null) {
      if(temp.next.no == no) {
        System.out.println(temp.next.no);
        flag = true;
        break;
      }
      temp = temp.next;
    }
    if(flag) {
      temp.next = temp.next.next;
    }else {
      System.out.println("未找到该序号");
    }
  }

  public StarNode getHead() {
    return head;
  }

  


}
class StarNode {
  int no;
  String name;
  StarNode next;
  public StarNode(int no,String name) {
    this.no = no;
    this.name = name;
  }
  @Override
  public String toString() {
    return "StarNode [no=" + no + ", name=" + name + "]";
  }
  
}

本周总结

本周主要还是写项目,对数据结构并没有更深一步的了解,好在算法题还是比较有保障的,希望下周继续努力。

标签:学习,temp,no,单向,StarNode,next,链表,singleList,public
来源: https://blog.csdn.net/weixin_52526235/article/details/121187601