设计链表的过程中我有两个错误

  • 在尾端添加时我一开始选择的当前节点是头节点,但是如果这个链表为空只有虚拟头节点时就会发生错误
  • 在指定位置添加节点时可以选择等于链表当前容量,即添加到尾端
class ListNode {
    int val;
    ListNode next;
    ListNode(){}
    ListNode(int val) {
        this.val=val;
    }
}
public class MyLinkedList {



    int size=0;
    ListNode dummyhead;
    ListNode cur;
    ListNode head;
//    ListNode tail;
    public MyLinkedList() {
        size=0;
        dummyhead=new ListNode(0);
    }

    public int get(int index) {
        if(index>=size||index<0){
            return -1;
        }

        cur=dummyhead.next;
        while(index>0){
            cur=cur.next;
            index--;
        }
        return cur.val;
    }

    public void addAtHead(int val) {
        ListNode node=new ListNode(val);
        node.next=dummyhead.next;
        dummyhead.next=node;
        //更新容量
        size++;
    }

    public void addAtTail(int val) {
        cur=dummyhead;
        while(cur.next!=null){
            cur=cur.next;
        }

        ListNode node=new ListNode(val);
        cur.next=node;
        node.next=null;
        size++;
    }

    public void addAtIndex(int index, int val) {
        if(index>size||index<0){
            return ;
        }
        cur=dummyhead;
        while(index>0){
            cur=cur.next;
            index--;
        }

        //找到要插入的位置的前一个节点
        ListNode node=new ListNode(val);
        node.next=cur.next;
        cur.next=node;
        size++;

    }

    public void deleteAtIndex(int index) {
        if(index>=size||index<0){
            return ;
        }
        cur=dummyhead;
        while(index>0){
            cur=cur.next;
            index--;
        }

        //找到要删除的位置的前一个节点
        cur.next=cur.next.next;
        size--;


    }
}

编码过程还是不够细致,边界条件没考虑到,应该多测试边界


健身的墨镜
1 声望0 粉丝