(一)最近需要开始学习算法。链表是数据结构中非常经典的一种数据结构。单向链表是基础中的基础。(二)单向链表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(sum
