当前位置: 首页 > Web前端 > HTML

Day58-100数据结构链表(一)-单向链表

时间:2023-03-28 12:34:07 HTML

(一)最近需要开始学习算法。链表是数据结构中非常经典的一种数据结构。单向链表是基础中的基础。(二)单向链表1、定义单向链表中的每个节点不仅包含一个值,还包含一个指向下一个节点的引用字段。这样,单向链表就把所有节点按顺序组织起来了。//单向链表的定义。publicclassSinglyListNode{intval;接下来是SinglyListNode;SinglyListNode(intx){val=x;}}在大多数情况下,我们将使用头节点(第一个节点)来表示整个列表。与数组不同,我们不能在常数时间内访问单向链表中的随机元素。如果我们要得到第i个元素,就得从头结点开始,一个一个遍历。按索引访问元素平均需要O(N)时间,其中N是链表的长度。2.操作(1)加法操作用给定值初始化一个新节点cur;将cur的下一个字段链接到prev的下一个节点next;将prev中的下一个字段链接到cur。(2)删除操作3.链表设计设计链表的实现。您可以选择使用单向链表或双向链表。单向链表中的节点应该有两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果你使用的是双向链表,你还需要一个属性prev来表示链表中的前一个节点。假设链表中的所有节点都是0-index。在链表类中实现这些函数:get(index):获取链表中索引节点的值。如果索引无效,则返回-1。addAtHead(val):在链表第一个元素前添加一个值为val的节点。插入后,新节点将成为链表的第一个节点。addAtTail(val):将值为val的节点附加到链表的最后一个元素。addAtIndex(index,val):在链表的index节点前添加一个值为val的节点。如果索引等于链表的长度,则该节点将追加到链表的末尾。如果索引大于链表的长度,则不会插入该节点。如果索引小于0,则在头部插入节点。deleteAtIndex(index):如果索引index有效,删除链表中第index个节点。实现代码如下:varMyLinkedList=function(){this.head=nullthis.length=0};/**获取链表中索引节点的值。如果索引无效,则返回-1。*@param{number}index*@return{number}*/MyLinkedList.prototype.get=function(index){//注意:这里需要判断index是否等于lengthif(index<0||index>=this.length){return-1}letcur=this.head;让总和=0;if(index==0){returncur.val}else{while(sumthis.length){return}letnode={val,next:null};让cur=this.head,pre,sum=0;if(index===0){returnthis.addAtHead(val);//索引为0,在头部插入}elseif(index===this.length){returnthis.addAtTail(val);//index=length,appendattheend}else{while(sum<=index-1){//找到索引位置的前一个节点pre=cur;cur=cur.next;//下一个节点总和++;}pre.next=节点;node.next=当前;}this.length++};/**如果index索引有效,删除链表中第index个节点。*@param{number}index*@return{void}*/MyLinkedList.prototype.deleteAtIndex=function(index){if(index<0||index>=this.length)return;让cur=this.head,pre,countIndex=0;if(index===0){this.head=cur.next}else{//让sum=0//while(sum