diff --git a/707设计链表java代码的修改 b/707设计链表java代码的修改 new file mode 100644 index 00000000..bf27e266 --- /dev/null +++ b/707设计链表java代码的修改 @@ -0,0 +1,187 @@ +//原来的代码随想录707设计链表的java代码中单链表的设计中有错误,修正后并对双链表进行了简化和更正,下面是我的java代码 + +//单链表 +class ListNode{ + int val; + ListNode next; + ListNode() {}; + ListNode(int val){ + this.val = val; + } +} + + +class MyLinkedList { + + //记录链表中元素的数量 + int size; + //记录链表的虚拟头结点 + ListNode head; + + public MyLinkedList() { + //初始化操作 + this.size = 0; + this.head = new ListNode(0); + this.head.next = null; + } + + public int get(int index) { + //判断index是否有效 + if(index<0 || index>=size){ + return -1; + } + ListNode cur = this.head; + //index 是可以取到的,因为有虚拟头结点 + for(int i=0; i<= index; i++){ + cur = cur.next; + } + return cur.val; + } + + public void addAtHead(int val) { + //等价于在第0个元素前添加 + addAtIndex(0,val); + } + + public void addAtTail(int val) { + //等价于在最后一个元素(null)前添加 + addAtIndex(size,val); + } + + public void addAtIndex(int index, int val) { + //index大于链表长度 + if(index>size){ + return; + } + //index小于0 + if(index<0){ + index = 0; + } + size++; + //找到前驱 + ListNode pre = this.head; + for(int i=0; i=size){ + return; + } + //删除操作 + size--; + ListNode pre = this.head; + for(int i=0; i=size){ + return -1; + } + ListNode cur = this.head; + //判断是哪一边遍历时间更短 + if(index >= size / 2){ + //tail开始 + cur = tail; + for(int i=0; i< size-index; i++){ + cur = cur.prev; + } + }else{ + for(int i=0; i<= index; i++){ + cur = cur.next; + } + } + return cur.val; + } + + public void addAtHead(int val) { + //等价于在第0个元素前添加 + addAtIndex(0,val); + } + + public void addAtTail(int val) { + //等价于在最后一个元素(null)前添加 + addAtIndex(size,val); + } + + public void addAtIndex(int index, int val) { + //index大于链表长度 + if(index>size){ + return; + } + //index小于0 + if(index<0){ + index = 0; + } + size++; + //找到前驱 + ListNode pre = this.head; + for(int i=0; i=size){ + return; + } + //删除操作 + size--; + ListNode pre = this.head; + for(int i=0; i