双向链表demo


class PersonNode(val pno:Int,val pname:String){
  val no:Int=pno
  var name: String = pname
  var next:PersonNode=null //下节点,默认null
  var pre:PersonNode=null //前一个节点,默认null

}


class DoubleLinkList{

  // 头节点
  val head:PersonNode=new PersonNode(0,null)

  //添加节点
  def add(personNode:PersonNode)={

    var tmp=head
    breakable {
      while (true) {
        if (tmp.next == null) {
          break()
        }
        tmp = tmp.next
      }
    }
    //此时tmp就是节点末尾
    tmp.next=personNode
    personNode.pre=tmp

  }

  //遍历
  def show():Unit={

    if(head.next==null){
      println("this linkList is empty!")
      return
    }

    var tmp=head.next
    breakable {
      while (true) {
        if (tmp == null) {
          break()
        }
        printf("no:%d\tname:%s\n", tmp.no, tmp.name)
        tmp = tmp.next
      }
    }

  }

  //更新节点
  def modify(personNode:PersonNode):Unit={
    if(head.next==null){
      println("this linkList is empty!")
      return
    }

    var tmp=head.next
    var flag=false //标志目标节点是否存在
    breakable {
      while (true) {
        if (tmp == null) {
          break()
        }
        if (tmp.no == personNode.no) {
          flag = true
          break()
        }
        tmp = tmp.next
      }
    }
    if(flag){
      //此时tmp就是目标节点
      tmp.name=personNode.name
    }else{
      println("the target node is not exits!")
    }

  }


  //del删除节点方法一
  def del1(personNode: PersonNode):Unit={

    if(head.next==null){
      println("this linkList is empty!")
      return
    }

    var tmp=head
    var flag=false//标志目标节点是否存在
    breakable {
      while (true) {
        if (tmp.next == null) {
          break()
        }
        if (tmp.next.no == personNode.no) {
          flag = true
          break()
        }
        tmp = tmp.next
      }
    }

    if(flag){
      //此时tmp的next就是目标节点
      tmp.next=tmp.next.next
      if(tmp.next!=null) tmp.next.pre=tmp
    }else{
      println("the target node is not exits!")
    }

  }

  //删除方法二
  def del2(personNode: PersonNode):Unit={

    if(head.next==null){
      println("this linkList is empty!")
      return
    }

    var tmp=head.next
    var flag=false //标志目标节点是否存在
    breakable {
       while (true) {
         if (tmp == null) break()
         if (tmp.no == personNode.no) {
           flag = true
           break()
         }
         tmp = tmp.next
       }
    }
    if(flag){
      //此时tmp就是目标节点
      tmp.pre.next=tmp.next
      if(tmp.next!=null) tmp.next.pre=tmp.pre
    }else{
      println("the target node is not exits!")
    }

  }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值