首页 > 其他 > 详细

数据结构_单向循环列表

时间:2020-02-23 20:59:36      阅读:81      评论:0      收藏:0      [点我收藏+]
//单向循环链表
  
  class Node {
    constructor (data) {
      this.data = data
      this.next = null
    }
  }

  class CycleList {
    constructor () {
      this.head = null
      this.length = 0
    }
    //追加数据
    append (data) {
      let newNode = new Node(data)
      let current = this.head
      if (!this.head) {
        this.head = newNode
        newNode.next = this.head
      }else {
        while (current.next != this.head) {
          current = current.next
        }
        newNode.next = this.head
        current.next = newNode
      }
      this.length++
      return true
    }
    //插入数据
    insert (posi, data) {
      if (posi < 0 || posi > this.length) return false
      let newNode = new Node(data)
      let current = this.head
      let index = 0
      if (posi == 0) {
        if (this.head) {
          while (current.next != this.head) {
            current = current.next
          }
          newNode.next = this.head
          current.next = newNode
          this.head = newNode
        }else {
          this.head = newNode
          newNode.next = this.head
        }
      }else if (posi == this.length) {
        while (current.next != this.head) {
          current = current.next
        }
        current.next = newNode
        newNode.next = this.head
      }else {
        while (index++ < posi -1) {
          current = current.next
        }
        newNode.next = current.next
        current.next = newNode
      }
      this.length++
      return true
    }
    //删除指定位置数据
    removeAt (posi) {
      if (posi < 0 || posi > this.length - 1) return false
      let current = this.head
      let index = 0
      if (posi == 0) {
        if (this.length != 1) {
          while (current.next != this.head) {
            current = current.next
          }
          current.next = this.head.next
          this.head = this.head.next
        }else {
          this.head = null
        }
      }else {
        while (index++ < posi - 1) {
          current = current.next
        }
        current.next = current.next.next
      }
      this.length--
      return true
    }
    remove (data) {
      //删除所有data的数据
      while (this.indexOf(data) != -1) {
        //删除第一个出现的data数据
        this.removeAt(this.indexOf(data))
      }
      return true
    }
    //查找
    indexOf (data) {
      //遍历
      let current = this.head
      let index = 0
      while (current.next != this.head) {
        if (current.data === data ) {
          return index
        }else {
          index++
          current = current.next
        }
      }
      if (current.data === data) {
        return index
      }
      return -1
    }
    isEmpty () {
      return this.head == null
    }
    size () {
      return this.length
    }
  }

  let cList = new CycleList()
  cList.append(0)
  cList.append(1)
  cList.append(2)
  cList.append(3)
  cList.append(4)
  cList.append(5)
  cList.insert(0, ‘start‘)
  cList.insert(7, ‘end‘)
  cList.insert(4,‘four‘)

 

数据结构_单向循环列表

原文:https://www.cnblogs.com/JunLan/p/12353945.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!