单链表的基本操作_单链表的简单实现

链表

单链表的操作

本文主要讲一下单链表的基本操作的实现思路,以及一种实现方式(也可以通过其他方式,例如删除的时候可以根据值删除也可以根据位置删除)

单链表的插入

单链表的插入需要知道插入位置的前驱,先让新节点(newNode)的next指向前驱节点(p)的next,然后改变前驱节点(p)的next,使它指向新的节点(newNode)

「注意:这个顺序是不可改变的,否则p节点的之后的节点会全部丢失,造成链表断链」

a450811e851cdde4f15f99546c5200ab.png
e007ae92ee0bae2a7519bc663f7b0c4f.png
//在pos之后插入一个节点
insertAtPosition(value,pos){
  let newNode = new Node(value)
  if(this.head === null){
    return false
  }
  let i = 0
  let p = this.head
  while(p !== null){
    if(i !== pos){
      i++
      p = p.next
    }else{
       newNode.next = p.next
       p.next = newNode
       return true
    }
  }
  return false
}

单链表的删除

单链表的删除同样需要知道插入位置的前驱,把前驱节点(p)的next指向被删除节点(delNode)的next,如果这个链表只有一个节点,就把head改为null

7c297eafb41fa92f8fbacb4c3fb66999.png
75c6e5020c8fd92ce52b31a10b175e70.png
0b00b64e7fd96ab45016106304ede714.png
//在pos位置删除一个节点
deleteAtPosition(pos){
  if(this.head === null){
    return false
  }
  let i = 0
  if(pos === 0){
    this.head = this.head.next
    return true
  }
  let p = this.head
  while(p !== null){
    if(i !== pos - 1){
      i++
      p = p.next
    }else{
       let delNode = p.next
       p.next = delNode.next
       return true
    }
  }
  return false
}

单链表的遍历

我们以打印单链表为例子来简单介绍一下单链表的遍历,单链表的遍历思路是用一个遍历指针(p),只要遍历指针不空,就打印他的key,然后让遍历指针走向下一个节点

7298a8b42effd552af7ea58e707c3009.png
e37c8ce9e3f79e2afecf8ac618079da1.png
printList(){
  if(this.head === null){
    console.log(`List is empty`)
    return false
  }
  let p = this.head
  while(p !== null){
    console.log(p.key)
    p = p.next
  }
}

单链表的查找

在单链表的查找中我们以值查找,我们去遍历链表,然后如果链表节点的val与所要查找的值相等,就返回节点

findInList(value){
  if(this.head === null){
    return false
  }
  let p = this.head
  while(p !== null){
    if(p.val === value){
      return p
    }else{
      p = p.next
    }
  }
  return false
}

Mindset

读者在实现单链表的过程中,可以通过画图来理清链表节点指针之间的关系,这样可以更好的理清思路

单链表的基本操作我们就介绍到这里 还有其他操作可以通过画图的方式一一实现  GoodBye

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值