在这里插入图片描述

public class ListNode{
    int val;
    ListNode next;
    ListNode(int x){
        val=x;
    }
    /*ListNode(){}
    ListNode(int val,ListNode next){
        this.val=val;
        this.next=next;
    }*/
}
class MyLinkedList{

    int size;//来记录链表长度,每次调用增加节点或者减少节点时修改其值
    ListNode head;//设置虚拟节点
    public MyLinkedList(){
        size=0;
        head=new ListNode(0);//虚拟节点不计入长度计算
    }
    public int get(int index) {
        if(index<0||index>=size) {//由于链表节点下标index由0开始(⚠️,),而size的大小是除虚拟节点之外的节点总个数,所以节点下标index范围为[0-(size-1)]
            return -1;
        }
        ListNode cur=head;
        while(index+1>0) {//加1是因为虚拟节点的原因
            cur=cur.next;
            index--;
        }
        return cur.val;    
    }    
    public void addAtHead(int val) {
        addAtIndex(0,val);

    }
    public void addAtTail(int val) {    
        addAtIndex(size,val);
    }

    public void addAtIndex(int index,int val) {

        if(index>size) {
            return ;
        }
        if(index<0) {
            index=0;
        }
        size++;//修改链表长度
        ListNode pred=head;
        for(int i=0;i<index;++i) {//到达index-1节点,从虚拟节点开始走需要走index步
            pred=pred.next;
        }
        ListNode toadd=new ListNode(val);
        toadd.next=pred.next;
        pred.next=toadd;
        //size++;    
    }
    public void deleteAtIndex(int index) {

        if(index<0||index>=size)
            return ;
         size—;//修改链表长度
          ListNode cur=head;
            for(int i=0;i<index;++i) {//到达index-1节点,从虚拟节点开始走需要走index步
                cur=cur.next;
            }
            cur.next=cur.next.next;
    }
}

leetcode      链表

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!