Java实现单链表

本文展示了如何使用Java实现一个简单的单链表数据结构,包括初始化链表、遍历链表、在指定位置插入节点、删除指定元素等功能。通过示例代码详细解释了每个方法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class OneLinkedListTest {
    private Node fristnode; //头结点
    private int size=0;    //记录大小

     public  static  class Node{     //结点类
         private Object data;       //该结点数据
         private Node next;         //该结点指向下一个结点的指针

         public Node(Object data){
             this.data=data;
             this.next=null;
         }

         @Override
         public String toString() {
             return  data+"->";

         }
     }

      public OneLinkedListTest(){  //初始化单链表
         this.fristnode=null;
         this.size=0;
      }

      public void print(){        //遍历单链表
          Node p= this.fristnode;
          while(p!=null){
              System.out.print(p);
              p=p.next;
          }
          System.out.println();
      }


      public void add(Node node,int index){    //单链表的添加元素
         if(index<0||index>size){
             System.out.println("超出范围,无法添加。。。。");
             return;
         }else if(index==0){
             if(fristnode==null){        //index为0,头结点为空,直接把值赋给头结点
                fristnode=node;
                size++;
                return;
             }else{
               node.next = fristnode;     //头结点不为空,在头结点前面插入一个元素,并为新的头结点
               fristnode=node;
               size++;
               return;
             }

         }else{
             Node p= fristnode;
             for(int i=0;i<index-1;i++){
                p=p.next;
             }
             node.next=p.next;
             p.next=node;
             size++;
             return;
         }

      }

      public void  remove(Object data) {
          if (fristnode == null) {
              System.out.println("链表为空。。。。");
              return;
          }else{
              while (data.equals(fristnode.data)) {     //删除元素为头结点,这里不用if
                                                        // 防止删除的头结点和头结点下一个结点相同 (5 5 1的情况)
                  fristnode = fristnode.next;
                  size--;
              }

              Node p = fristnode;
              while(p!=null  &&  p.next!=null){                //确保头结点后面有元素
                 if(p.next.data.equals(data)){                //删除元素不为头结点
                      p.next=p.next.next;
                      size--;
                  }else{
                      p=p.next;
                  }

              }


          }
      }

    public static void main(String[] args) {
        OneLinkedListTest oneLinkedListTest = new OneLinkedListTest();
        oneLinkedListTest.add(new Node(1),0);
        oneLinkedListTest.add(new Node(5),1);
        oneLinkedListTest.add(new Node(5),0);
        oneLinkedListTest.add(new Node("KIKI"),2);
        oneLinkedListTest.print();
        oneLinkedListTest.remove(5);
        oneLinkedListTest.print();


    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值