单链表增删

#单链表增删
##1、创建节点类

public class ListNode {
    
    
    
    public int val;//数据域
    ListNode next;//指针域

    public ListNode(int val){
    
    
        this.val=val;
    }

    public ListNode(){
    
    
    }
}

##2、单链表类

class SingleLinkList {
    
    
    private int size;//链表长度

    private ListNode head;//头节点

    Object[] obj;

    public SingleLinkList(int i) {
    
    
        this.obj = new Object[i];//初始化链表长度

    }
}

##3、头插法

 public void headInsert(ListNode node){
    
    

        //如果头节点的指向首元的next为空,则第一个首元即为
        if(head.next==null){
    
    
            head= node;
        }
        else{
    
    
           node.next=head;
           head=node;
        }
        size++;

    }

##4、遍历链表

//遍历链表
    public void scanList(){
    
    
        ListNode node=head;//存储当前链表头结点的地址
        while(node!=null){
    
    
            System.out.println(node.val);//打印数据
            node=node.next;//继续访问下一节点
        }
        System.out.println("遍历完成");
    }

##5、在链表中间位置插入节点

public void insertAtMediumList(ListNode node,int  location){
    
    
        if(location<0||location>size){
    
    //判断插入位置是否在链表长度范围内
            System.out.println("非法插入");
            return;
        }
        if(location==0){
    
    //头插法
           headInsert(node);
           return;
        }
        //关键:找到插入位置的前节点
        ListNode listNode = new ListNode();//存储插入位置的前节点
        listNode=head;
        int i=1;//首元节点序号
        while(i<location){
    
    //定位插入位置前的节点
           listNode=listNode.next;
           i++;
        }
      ListNode emp=  new ListNode();//过渡存储插入位置前的节点next内容
        emp=listNode.next;
        listNode.next=node;//插入新节点
        node.next=emp;
        size++;
    }

##6、删除节点

 public void removeIndex(int index){
    
    
        //判断所要删除节点索引是否合法
        if(!(index<0||index>size)) {
    
    
            System.out.println("删除位置不合法");
            return;
        }
        //删除头节点的情况
        if (index == 0) {
    
    
            ListNode temp = head;
            head = head.next;
            temp.next = null;
        }
        
        ListNode listNode = new ListNode();//过渡节点
        int i=1;//首元数据序号
        listNode=head;
        //找到删除节点的前节点
        while(i<index){
    
    
            listNode=listNode.next;
            i++;
        }
        ListNode delCurrentNode=listNode.next;//所要删除的节点
        listNode.next=delCurrentNode.next;
        delCurrentNode.next=null;//所要删出节点的指针域置空
        size--;
    }

初学,诸多不解,求学指正

猜你喜欢

转载自blog.csdn.net/m0_48991950/article/details/131318576