From ce5c5d010a778e9aadcacf903192b1da445206ff Mon Sep 17 00:00:00 2001 From: Tcotyledons <53686585+Tcotyledons@users.noreply.github.com> Date: Tue, 13 Sep 2022 13:30:31 +0800 Subject: [PATCH] =?UTF-8?q?Create=20707=E8=AE=BE=E8=AE=A1=E9=93=BE?= =?UTF-8?q?=E8=A1=A8java=E4=BB=A3=E7=A0=81=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码随想录网址上链表中的力扣707设计链表中的java代码:1,对于单链表的操作,删除元素的for循环跳出条件有误,进行了修改;2,对于双向链表,进行了插入头,尾元素和插入元素的统一操作。自己在原作者基础上写了一份设计链表的java代码。 --- 707设计链表java代码的修改 | 187 +++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 707设计链表java代码的修改 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