用Java写一个链表数据

package arrayListTest;
//定义一个链表
public class Node {
 
    private int m_Data;//链表中的数据
    private Node m_Next;//链表中指针属性  指向下个Node对象的对象应用
    Node(int data){
      m_Data=data;
      m_Next=null;
    }
    Node(int data,Node next){
      m_Data=data;
      m_Next=next;
    }
    void setData(int data){//修改节点中的数据
      m_Data=data;
      
    }
    int getData(){//获得节点中的数据
      return m_Data;
    }
    void setNext(Node next){//修改节点的指针
      m_Next=next;
    }
    Node getNext(){//获得节点中的指针指向的对象的引用
      return m_Next;
    }
}

 

package arrayListTest;
//修改链表
public class LinksList {
 
  Node m_FirstNode;//链表中的第一个节点
//构造函数
  LinksList(){
    m_FirstNode=null;
  }
  LinksList(int data){
    m_FirstNode=new Node(data);
  }
  String visitAllNode(){//遍历数据  将数据串成一个字符串 返回一个S
    Node next=m_FirstNode;
    String s="";
    while(next!=null){
      s=s+next.getData()+";";
      next=next.getNext();    
    }
    return s;
  }
  void insertAtBegin(int data){//将数据插入到节点的前面
    if(m_FirstNode==null){//如果是空链表的话直接插入就可以了
        m_FirstNode=new Node(data);//把data做为第一个节点传给Node对象
    }
    else{
      m_FirstNode=new Node(data,m_FirstNode);//把新节点插入到第一个节点的前面 并指向原来的第一个节点
    }
  }
  void insertAfterId(int data,int id){//将数据data插入到包含数据ID的节点后面 若连接没有id则插入在整个链表的最后
    Node next = m_FirstNode;
    if(next==null){//对空链表直接插入
      m_FirstNode=new Node(data);
    }else{
      while(next.getNext()!=null&& next.getData()==id){
        next=next.getNext();//找到合适的插入位置
//        Node i=next.getNext();//创建一个next的指针
//        Node next1= new Node(data,i);//创建Node的对象 把data插入到I的位置上
//        next.setNext(next1);
        next.setNext(new Node(data,next.getNext()));//按照id来设置数据
      }
    }
  }
    boolean removeAtId(int id){//删除链表中的第一个数据为ID的节点
      Node ahead=m_FirstNode;//前面的节点
      Node follow=ahead;//指向ahead节点
      if(ahead==null){
        return false;        
      }
      else if(ahead.getData()==id){//如果节点获取的数据Data和ID是一样的
        m_FirstNode=m_FirstNode.getNext();//删除成功
        return true;
      }else{
        ahead=ahead.getNext();
        while(ahead!=null){
          if(ahead.getData()==id){
            follow.setNext(ahead.getNext());
            return true;
          }
          follow=ahead;
          ahead=ahead.getNext();
        }
      }
      
      return  false;
    }
    void removeAll(){
      m_FirstNode=null;
    }
}

 

 

package arrayListTest;
 
public class UserLinksList {
 
  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    LinksList list = new LinksList(-1); //创建一个含有节点的链表
    for (int i = 0; i < 10; i++) {
      list.insertAtBegin(i); //想空链表中插入10个节点
      System.out.println(list.visitAllNode());
    }
    list.insertAfterId(37, 6); //在指定的位置插入插入在数据6的后面
    System.out.println(list.visitAllNode());
    list.insertAfterId(-1, 3); //在指定的位置插入 插入在位置3的后面
    System.out.println(list.visitAllNode());
    if (list.removeAtId(4)) { //删除链表中的指定节点
      System.out.println(list.visitAllNode());
    } else {
      System.out.println("链表中不存在这个数据");
 
    }
    //list.removeAll();//删除整个链表
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值