美文网首页
链表的创建、遍历、插入、删除、查找、更新

链表的创建、遍历、插入、删除、查找、更新

作者: ZYiDa | 来源:发表于2019-10-23 15:24 被阅读0次

以下内容基于kotlin语言,讲解都在注释里面,都是我自己的理解,错误的地方还请多多指教

  • 创建一个链表
//创建链表
class Node{
    var id:Int? = null
    var next:Node? = null
}
  • 初始化链表
//初始化链表
fun createLinkedList():Node?{
    var head:Node? = null //头结点
    var newnode:Node //每次需要创建的节点
    var last:Node = Node() //尾节点
    for (i in 0 until 10){
        //创建新的节点
        newnode = Node()
        newnode.id = i + 10086
        if (i == 0){//列表为空时,头结点 -> 新创建的这个节点
            head = newnode
        }else{//不为空时,就把最后一个节点的next -> 新创建的节点
            last.next = newnode
        }
        last = newnode//保证last是最后一个节点
    }
    //这一步可以忽略,因为在初始化未赋值时next为null,但是next对象在初始化时不能接受null时,这一步就不能少
    last.next = null
    return head
}
  • 遍历链表
//遍历链表
fun Node?.loopThroughLinkedList(){
    var tmp:Node? = this
    if (tmp == null){
        return
    }else{
        print("Current:$tmp  Id:${tmp.id} Next:${tmp.next}\n")
        tmp = tmp.next
    }
    tmp.loopThroughLinkedList()
}
    • 获取链表长度
//获取链表长度
fun Node?.linkedListLength():Int{
    if (this == null){
        return  0
    }
    var length:Int = 0
    var tmp:Node? = this
    while (tmp?.next != null){
        tmp = tmp?.next
        length += 1
    }
    length += 1//把最后一个节点也算进去
    return length
}
  • 插入
//插入
fun Node?.insert(insertNode: Node,index:Int):Node?{
    val length = this.linkedListLength()
    var tmpNode:Node? = this

    if (index < 0 || index > length-1){
        throw IllegalArgumentException("超出链表范围")
    }
    if (index == 0){//头部插入
        insertNode.next = tmpNode//1、将插入节点指向头结点
        tmpNode = insertNode//2、将头指针指向插入的节点
        return  tmpNode
    }else if (index == length-1){//尾部插入
        while (tmpNode?.next != null){//1、当tmpNode为最后一个节点时跳出while循环
            tmpNode = tmpNode.next
        }
        tmpNode?.next = insertNode//2、然后将尾节点指向插入的节点
        insertNode.next = null//3、保持插入节点是最后一个节点,因为插入节点的next初始化时就为null,所以这一步也可以省略
        return this
    }else{//中间位置插入

        var node:Node? = Node()
        for (i in 0 until (index - 1)){
            if (tmpNode?.next != null){
                tmpNode = tmpNode.next//1、找到第n-1个节点
            }
        }
        //2、找到第n个节点
        tmpNode?.next = insertNode//3、将第n-1个节点指向插入的节点
        insertNode.next = node//4、将插入的节点指向原来的第n个节点
        return this
    }
}
  • 删除
//删除
fun Node?.delete(index:Int):Node?{
    val length = this.linkedListLength()
    var i = if (index >= length) length else index
    var tmp = this
    var pre:Node? = Node()
    for (i in 0 until index){
        if (tmp?.next != null){
            pre = tmp//获取要删除节点的前一个节点
            tmp = tmp.next//要删除的节点
        }
    }
    if (tmp == this){//如果要删除的是头结点
        return tmp?.next
    }
    pre?.next = tmp?.next//重新进行指向
    tmp = null//释放被删除的节点
    return this
}
  • 查找
//查找
fun Node?.find(index: Int):Node?{
    var tmp = this
    val length = this.linkedListLength()
    if (index < 0 || index > length-1){
        throw IllegalArgumentException("超出链表范围")
    }

    for (i in 0 until index){
        if (tmp?.next != null){
            tmp = tmp.next
        }
    }
    return tmp
}
  • 更新
//更新
fun Node?.update(index: Int,id:Int):Node?{
    var tmp = this
    val length = this.linkedListLength()
    if (index < 0 || index > length-1){
        throw IllegalArgumentException("超出链表范围")
    }
    for (i in 0 until index){
        if (tmp?.next != null){
            tmp = tmp.next
        }
    }
    tmp?.id = id
    return this
}

相关文章

  • 链表的创建、遍历、插入、删除、查找、更新

    以下内容基于kotlin语言,讲解都在注释里面,都是我自己的理解,错误的地方还请多多指教 创建一个链表 初始化链表...

  • 数据结构【单链表基本操作】

    包含单链表的创建、遍历、反转(指针替换、递归)、排序、插入、删除

  • Java集合类之HashMap源码学习笔记

    数组虽然可以随机访问,但插入和删除效率较低,链表虽然插入和删除效率较高,查找却只能通过遍历,而HashMap则基于...

  • 0x05双向循环链表

    1 双向循环链表创建 2 双向循环链表插入元素 3 遍历双向循环链表 4双向循环链表删除结点

  • python数据结构——单链表

    链表 python实现链表链表的初始化创建元素的插入和删除链表的遍历元素的查询链表的删除链表的逆序判断链表是否有环...

  • 数据结构(C语言描述)

    data-structure(C) 欢迎各位来补充哦? 线性表(创建?、插入?、删除?、查找?) 单链表(创建?、...

  • 1链表相关操作

    1.创建带头节点的链表,并且遍历输出。 题目 2.插入新链表,保持顺序,并遍历输出链表。 3.插入新的链表,并遍历...

  • 链表处理

    1.创建链表 2.查找元素 3.插入元素 4.删除元素 5.静态链表 1074 Reversing Linked ...

  • 19.数据结构-线性表-2.单链表增加和删除

    0>>>初始化和创建 1>>>单链表的插入和删除。 1.单链表的插入 2.单链表的删除 2>>>单链表的整表创建和...

  • 二、链表遍历框架

    很多链表题目都可以归结为链表的遍历,以及在遍历中做反转、插入和删除操作,因此可以使用链表遍历的框架来解题。链表遍历...

网友评论

      本文标题:链表的创建、遍历、插入、删除、查找、更新

      本文链接:https://www.haomeiwen.com/subject/azyhvctx.html